From 9defa473267b58b6f1ad0130fd377186c103bb1c Mon Sep 17 00:00:00 2001 From: balbes150 Date: Fri, 26 Jan 2018 21:37:38 +0300 Subject: [PATCH 1/2] v20180126 init --- Makefile | 4 +- arch/arm64/Makefile | 11 +- arch/arm64/boot/dts/Makefile | 11 +- arch/arm64/boot/dts/amlogic/gxbb_p200.dts | 22 +- .../dts/amlogic/gxbb_p200_1G_wetek_hub.dts | 1218 ++++++++ arch/arm64/boot/dts/amlogic/gxbb_p200_2G.dts | 14 +- .../dts/amlogic/gxbb_p200_2G_wetek_play_2.dts | 1171 ++++++++ .../dts/amlogic/mesongxbb-gpu-mali450.dtsi | 2 +- arch/arm64/boot/dts/amlogic/mesongxbb.dtsi | 10 +- arch/arm64/boot/dts/apm-mustang.dts | 30 - arch/arm64/boot/dts/apm-storm.dtsi | 349 --- arch/arm64/boot/dts/clcd-panels.dtsi | 52 - arch/arm64/boot/dts/foundation-v8.dts | 232 -- arch/arm64/boot/dts/fvp-base-gicv2-psci.dts | 266 -- arch/arm64/boot/dts/juno.dts | 498 ---- arch/arm64/boot/dts/kvim.dts | 2 +- arch/arm64/boot/dts/kvim2_dualos.dts | 2470 ++++++++++++++++ arch/arm64/boot/dts/kvim2_libreelec.dts | 2415 ++++++++++++++++ arch/arm64/boot/dts/kvim2_linux.dts | 2381 ++++++++++++++++ arch/arm64/boot/dts/kvim2_multios.dts | 2471 +++++++++++++++++ arch/arm64/boot/dts/kvim2_nougat.dts | 2427 ++++++++++++++++ arch/arm64/boot/dts/kvim_multios.dts | 1090 ++++++++ arch/arm64/boot/dts/kvim_nougat.dts | 1090 ++++++++ .../arm64/boot/dts/mesongxbb-gpu-mali450.dtsi | 134 + arch/arm64/boot/dts/mesongxbb.dtsi | 825 ++++++ arch/arm64/boot/dts/mesongxl.dtsi | 726 +++++ arch/arm64/boot/dts/mesongxm-gpu-t82x.dtsi | 208 ++ arch/arm64/boot/dts/mesongxm.dtsi | 805 ++++++ arch/arm64/boot/dts/mesongxtvbb-gpu-t83x.dtsi | 208 ++ arch/arm64/boot/dts/mesongxtvbb.dtsi | 775 ++++++ arch/arm64/boot/dts/mesontxl-panel.dtsi | 271 ++ arch/arm64/boot/dts/mesontxl.dtsi | 607 ++++ arch/arm64/boot/dts/partitions-multios.dtsi | 95 + arch/arm64/boot/dts/rtsm_ve-aemv8a.dts | 161 -- arch/arm64/boot/dts/rtsm_ve-motherboard.dtsi | 243 -- arch/arm64/boot/dts/skeleton.dtsi | 13 - fs/overlayfs/Kconfig | 10 + fs/overlayfs/Makefile | 7 + fs/overlayfs/copy_up.c | 413 +++ fs/overlayfs/dir.c | 928 +++++++ fs/overlayfs/inode.c | 436 +++ fs/overlayfs/overlayfs.h | 199 ++ fs/overlayfs/readdir.c | 557 ++++ fs/overlayfs/super.c | 1046 +++++++ scripts/package/builddeb | 167 +- set_clean | 9 + set_dtb | 8 + set_make | 8 + set_menuconfig | 8 + 49 files changed, 25191 insertions(+), 1912 deletions(-) create mode 100644 arch/arm64/boot/dts/amlogic/gxbb_p200_1G_wetek_hub.dts create mode 100644 arch/arm64/boot/dts/amlogic/gxbb_p200_2G_wetek_play_2.dts delete mode 100644 arch/arm64/boot/dts/apm-mustang.dts delete mode 100644 arch/arm64/boot/dts/apm-storm.dtsi delete mode 100644 arch/arm64/boot/dts/clcd-panels.dtsi delete mode 100644 arch/arm64/boot/dts/foundation-v8.dts delete mode 100644 arch/arm64/boot/dts/fvp-base-gicv2-psci.dts delete mode 100644 arch/arm64/boot/dts/juno.dts create mode 100644 arch/arm64/boot/dts/kvim2_dualos.dts create mode 100644 arch/arm64/boot/dts/kvim2_libreelec.dts create mode 100644 arch/arm64/boot/dts/kvim2_linux.dts create mode 100644 arch/arm64/boot/dts/kvim2_multios.dts create mode 100644 arch/arm64/boot/dts/kvim2_nougat.dts create mode 100644 arch/arm64/boot/dts/kvim_multios.dts create mode 100644 arch/arm64/boot/dts/kvim_nougat.dts create mode 100644 arch/arm64/boot/dts/mesongxbb-gpu-mali450.dtsi create mode 100644 arch/arm64/boot/dts/mesongxbb.dtsi create mode 100644 arch/arm64/boot/dts/mesongxl.dtsi create mode 100644 arch/arm64/boot/dts/mesongxm-gpu-t82x.dtsi create mode 100644 arch/arm64/boot/dts/mesongxm.dtsi create mode 100644 arch/arm64/boot/dts/mesongxtvbb-gpu-t83x.dtsi create mode 100644 arch/arm64/boot/dts/mesongxtvbb.dtsi create mode 100644 arch/arm64/boot/dts/mesontxl-panel.dtsi create mode 100644 arch/arm64/boot/dts/mesontxl.dtsi create mode 100644 arch/arm64/boot/dts/partitions-multios.dtsi delete mode 100644 arch/arm64/boot/dts/rtsm_ve-aemv8a.dts delete mode 100644 arch/arm64/boot/dts/rtsm_ve-motherboard.dtsi delete mode 100644 arch/arm64/boot/dts/skeleton.dtsi create mode 100644 fs/overlayfs/Kconfig create mode 100644 fs/overlayfs/Makefile create mode 100644 fs/overlayfs/copy_up.c create mode 100644 fs/overlayfs/dir.c create mode 100644 fs/overlayfs/inode.c create mode 100644 fs/overlayfs/overlayfs.h create mode 100644 fs/overlayfs/readdir.c create mode 100644 fs/overlayfs/super.c create mode 100755 set_clean create mode 100755 set_dtb create mode 100755 set_make create mode 100755 set_menuconfig diff --git a/Makefile b/Makefile index 8c6dbdf12c0b9..ae172c08e5479 100644 --- a/Makefile +++ b/Makefile @@ -195,8 +195,8 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \ # "make" in the configured kernel build directory always uses that. # Default value for CROSS_COMPILE is not to prefix executables # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile -ARCH ?= -CROSS_COMPILE ?= +ARCH ?= $(SUBARCH) +CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) # Architecture as present in compile.h UTS_MACHINE := $(ARCH) diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile index 4d34ea369977c..67719bfc4230a 100644 --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -68,25 +68,20 @@ endif KBUILD_DTBS := dtbs -all: $(KBUILD_IMAGE) $(KBUILD_DTBS) showtime +all: $(KBUILD_IMAGE) $(KBUILD_DTBS) boot := arch/arm64/boot -showtime: - @echo -en '\t\tBuild time: ' - @date - @echo -e '\t\tKhadas: Something a little different!\n' - Image Image.gz Image.lzo: vmlinux $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ zinstall install: vmlinux $(Q)$(MAKE) $(build)=$(boot) $@ -%.dtb: scripts showtime +%.dtb: scripts $(if $(filter $@,$(mesondtb)),\ $(Q)$(MAKE) $(build)=$(boot)/dts/amlogic $(boot)/dts/amlogic/$@,\ - $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@) + $(Q)$(MAKE) $(build)=customer/$(boot)/dts customer/$(boot)/dts/$@) dtbs: scripts $(Q)$(MAKE) $(build)=$(boot)/dts dtbs diff --git a/arch/arm64/boot/dts/Makefile b/arch/arm64/boot/dts/Makefile index 49d0a64c53e7f..f74bf3ebb326f 100644 --- a/arch/arm64/boot/dts/Makefile +++ b/arch/arm64/boot/dts/Makefile @@ -1,7 +1,10 @@ -dtb-$(CONFIG_ARCH_VEXPRESS) += rtsm_ve-aemv8a.dtb foundation-v8.dtb \ - fvp-base-gicv2-psci.dtb -dtb-$(CONFIG_ARCH_XGENE) += apm-mustang.dtb -dtb-$(CONFIG_ARCH_VEXPRESS) += juno.dtb +dtb-$(CONFIG_ARM64) += kvim_nougat.dtb \ + kvim_multios.dtb \ + kvim2_nougat.dtb \ + kvim2_dualos.dtb \ + kvim2_multios.dtb \ + kvim2_libreelec.dtb \ + kvim2_linux.dtb targets += dtbs diff --git a/arch/arm64/boot/dts/amlogic/gxbb_p200.dts b/arch/arm64/boot/dts/amlogic/gxbb_p200.dts index 37ce48408fa1d..0ed3306faf2e6 100644 --- a/arch/arm64/boot/dts/amlogic/gxbb_p200.dts +++ b/arch/arm64/boot/dts/amlogic/gxbb_p200.dts @@ -460,20 +460,16 @@ pinname = "sd"; ocr_avail = <0x00200080>; // 3.3:0x200000, 1.8+3.3:0x00200080 caps = "MMC_CAP_4_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", - "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_UHS_SDR12", "MMC_CAP_UHS_SDR25","MMC_CAP_UHS_SDR50"; + "MMC_CAP_SD_HIGHSPEED"; //"MMC_CAP_UHS_SDR12", //"MMC_CAP_UHS_SDR25","MMC_CAP_UHS_SDR50", //"MMC_CAP_UHS_SDR104"; - f_min = <400000>; + f_min = <400000>; f_max = <100000000>; max_req_size = <0x20000>; /**128KB*/ gpio_dat3 = <&gpio CARD_4 GPIO_ACTIVE_HIGH>; jtag_pin = <&gpio CARD_0 GPIO_ACTIVE_HIGH>; gpio_cd = <&gpio CARD_6 GPIO_ACTIVE_HIGH>; - /*if card have no switch gpio, remove all relative to vol_switch */ - vol_switch = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>; - vol_switch_18 = <0>; /* 1 = high, 0 = low */ - vol_switch_delay = <150>; /* Uint: ms*/ irq_in = <3>; irq_out = <5>; card_type = <5>; /* 0:unknown, 1:mmc card(include eMMC), 2:sd card(include tSD), 3:sdio device(ie:sdio-wifi), 4:SD combo (IO+mem) card, 5:NON sdio device(means sd/mmc card), other:reserved */ @@ -496,7 +492,7 @@ "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_UHS_SDR12","MMC_CAP_UHS_SDR25", "MMC_CAP_UHS_SDR50","MMC_CAP_UHS_SDR104", - "MMC_PM_KEEP_POWER"; + "MMC_PM_KEEP_POWER","MMC_CAP_SDIO_IRQ"; f_min = <400000>; f_max = <200000000>; max_req_size = <0x20000>; /**128KB*/ @@ -622,7 +618,7 @@ system:system { pname = "system"; - size = <0x0 0x40000000>; + size = <0x0 0x60000000>; mask = <1>; }; cache:cache @@ -871,11 +867,11 @@ pl-periph-id = <0>; /** lm name */ clock-src = "usb0"; /** clock src */ port-id = <0>; /** ref to mach/usb.h */ - port-type = <0>; /** 0: otg, 1: host, 2: slave */ + port-type = <1>; /** 0: otg, 1: host, 2: slave */ port-speed = <0>; /** 0: default, high, 1: full */ port-config = <0>; /** 0: default */ port-dma = <0>; /** 0: default, 1: single, 2: incr, 3: incr4, 4: incr8, 5: incr16, 6: disable*/ - port-id-mode = <0>; /** 0: hardware, 1: sw_host, 2: sw_slave*/ + port-id-mode = <1>; /** 0: hardware, 1: sw_host, 2: sw_slave*/ gpio-vbus-power = "GPIODV_24"; gpios = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>; gpio-work-mask = <1>; /**0: work on pulldown,1:work on pullup*/ @@ -1194,9 +1190,9 @@ }; audio_spdif_pins:audio_pin1{ - amlogic,setmask=; /*spdif_out*/ - amlogic,clrmask=; /*spdif_out*/ - amlogic,pins ="GPIOAO_6"; /*spdif_out*/ + amlogic,setmask=<1 0x200>; /*spdif_out*/ + amlogic,clrmask=<1 0x10000>; /*spdif_out*/ + amlogic,pins ="GPIOY_12"; /*spdif_out*/ }; audio_btpcm_pins:audio_btpcm_pins{ diff --git a/arch/arm64/boot/dts/amlogic/gxbb_p200_1G_wetek_hub.dts b/arch/arm64/boot/dts/amlogic/gxbb_p200_1G_wetek_hub.dts new file mode 100644 index 0000000000000..08a9f341a1212 --- /dev/null +++ b/arch/arm64/boot/dts/amlogic/gxbb_p200_1G_wetek_hub.dts @@ -0,0 +1,1218 @@ +/* + * Amlogic Ltd. GXBaby Plaform + * + */ + +/dts-v1/; + +#include +#include +#include +#include +#include +#include "mesongxbb.dtsi" +/ { + model = "Amlogic"; + amlogic-dt-id = "gxb_p200_1g"; + compatible = "amlogic, Gxbb"; + interrupt-parent = <&gic>; + #address-cells = <2>; + #size-cells = <2>; + + aliases { + serial0 = &uart_AO; + serial1 = &uart_A; + }; + + gpu_dvfs_tbl:gpu_dvfs_tbl { + sc_mpp = <3>;/* number of pp used most of time.*/ + tbl = <&clk285_cfg &clk400_cfg &clk500_cfg &clk666_cfg &clk800_cfg>; + }; + + memory@00000000 { + device_type = "memory"; + linux,usable-memory = <0x0 0x1000000 0x0 0x3f000000>; + }; + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + /* global autoconfigured region for contiguous allocations */ + secmon_reserved:linux,secmon { + compatible = "amlogic, aml_secmon_memory"; + reg = <0x0 0x10000000 0x0 0x200000>; + no-map; + }; + secos_reserved:linux,secos { + status = "disable"; + compatible = "amlogic, aml_secos_memory"; + reg = <0x0 0x05300000 0x0 0x2000000>; + no-map; + }; + pstore:aml_pstore { + compatible = "amlogic, pstore"; + reg = <0x0 0x07300000 0x0 0x100000>; + no-map; + }; + fb_reserved:linux,meson-fb { + compatible = "amlogic, fb-memory"; + size = <0x0 0x1900000>; + no-map; + }; + + di_reserved:linux,di { + compatible = "amlogic, di-mem"; + size = <0x0 0x1e00000>; //10x1920x1088x3/2=30M + //no-map; + multi-use; + }; + + ion_reserved:linux,ion-dev { + compatible = "amlogic, idev-mem"; + size = <0x0 0x2000000>; + multi-use; + }; + + /* vdin0 */ +// vdin0_reserved:linux,vdin0 { +// compatible = "amlogic, vdin_memory"; + /* 1920x1080x2x4 =17M */ +// size = <0x0 0x01000000>; +// }; + /* vdin1 */ +// vdin1_reserved:linux,vdin1 { +// compatible = "amlogic, vdin_memory"; + /* 1920x1080x2x4 =17M */ +// size = <0x0 0x01000000>; +// }; + /* POST PROCESS MANAGER */ + //ppmgr_reserved:linux,ppmgr { + // compatible = "amlogic, ppmgr_memory"; + // size = <0x0 0x2000000>; + //}; + + codec_mm_cma:linux,codec_mm_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0xc000000>; + alignment = <0x0 0x400000>; + linux,contiguous-region; + }; + picdec_cma_reserved:linux,picdec { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x0>; + status = "disabled"; + alignment = <0x0 0x400000>; + linux,contiguous-region; + }; + /*vm0_cma_reserved:linux,vm0_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x2000000>; + alignment = <0x0 0x400000>; + }; + vm1_cma_reserved:linux,vm1_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x2000000>; + alignment = <0x0 0x400000>; + };*/ + /* codec shared reserved */ + codec_mm_reserved:linux,codec_mm_reserved { + compatible = "amlogic, codec-mm-reserved"; + size = <0x0 0x4100000>; + alignment = <0x0 0x100000>; + //no-map; + }; + }; + + meson-vout { + compatible = "amlogic, meson-vout"; + dev_name = "meson-vout"; + status = "okay"; + }; + meson-fb { + compatible = "amlogic, meson-fb"; + memory-region = <&fb_reserved>; + dev_name = "meson-fb"; + status = "okay"; + interrupts = <0 3 1 + 0 89 1>; + interrupt-names = "viu-vsync", "rdma"; + mem_size = <0x01800000 0x00100000>; /* fb0/fb1 memory size */ + display_mode_default = "1080p60hz"; + scale_mode = <1>; /** 0:VPU free scale 1:OSD free scale 2:OSD super scale */ + display_size_default = <1920 1080 1920 3240 32>; //1920*1080*4*3 = 0x17BB000 + }; + ge2d { + compatible = "amlogic, ge2d"; + dev_name = "ge2d"; + status = "okay"; + interrupts = <0 150 1>; + interrupt-names = "ge2d"; + clocks = <&clock CLK_VAPB_0>, + <&clock CLK_GE2D>; + clock-names = "clk_vapb_0", + "clk_ge2d"; + resets = <&clock GCLK_IDX_GE2D>; + reset-names = "ge2d"; + }; + codec_io { + compatible = "amlogic, codec_io"; + #address-cells=<2>; + #size-cells=<2>; + ranges; + io_cbus_base{ + reg = <0x0 0xC1100000 0x0 0x100000>; + }; + io_dos_base{ + reg = <0x0 0xc8820000 0x0 0x10000>; + }; + io_hiubus_base{ + reg = <0x0 0xc883c000 0x0 0x2000>; + }; + io_aobus_base{ + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + io_vcbus_base{ + reg = <0x0 0xd0100000 0x0 0x40000>; + }; + io_dmc_base{ + reg = <0x0 0xc8838000 0x0 0x400>; + }; + }; + codec_mm { + compatible = "amlogic, codec, mm"; + memory-region = <&codec_mm_cma &codec_mm_reserved>; + dev_name = "codec_mm"; + status = "okay"; + }; + ethmac: ethernet@0xc9410000{ + compatible = "amlogic, gxbb-rgmii-dwmac"; + reg = <0x0 0xc9410000 0x0 0x10000 + 0x0 0xc8834540 0x0 0x8>; + interrupts = <0 8 1>; + phy-mode= "rgmii"; + pinctrl-names = "eth_pins"; + pinctrl-0 = <ð_pins>; + rst_pin-gpios = <&gpio GPIOZ_14 0>; + mc_val = <0x1621>; + resets = <&clock GCLK_IDX_ETHERNET>; + reset-names = "ethpower"; + interrupt-names = "macirq"; + clocks = <&clock CLK_81>; + clock-names = "ethclk81"; + }; + + pwm { + compatible = "amlogic, gx-pwm"; + status = "okay"; + pwm-outputs = <0>,<1>,<2>,<3>,<4>,<5>,<6>,<7>; + reg = <0x0 0xc1108550 0x0 0x30>, + <0x0 0xc8100550 0x0 0x10>; + clocks = <&clock CLK_XTAL>, + <&clock CLK_VID_PLL>, + <&clock CLK_FPLL_DIV4>, + <&clock CLK_FPLL_DIV3>; + clock-names = "xtal", + "vid_pll_clk", + "fclk_div4", + "fclk_div3"; + clock-select = <0x0>,<0x0>,<0x0>,<0x0>,<0x3>,<0x0>,<0x0>,<0x0>; + }; + + mesonstream { + compatible = "amlogic, codec, streambuf"; + dev_name = "mesonstream"; + status = "okay"; + resets = <&clock GCLK_IDX_HIU_PARSER_TOP + &clock GCLK_IDX_VPU_INTR + &clock GCLK_IDX_DEMUX + &clock GCLK_IDX_DOS>; + reset-names = "parser_top", + "vpu_intr", + "demux", + "vdec"; + }; + + amvideocap { + compatible = "amlogic, amvideocap"; + dev_name = "amvideocap.0"; + status = "okay"; + max_size = <8>;//8M + }; + + ion_dev { + compatible = "amlogic, ion_dev"; + memory-region = <&ion_reserved>; + }; + + vdec { + compatible = "amlogic, vdec"; + dev_name = "vdec.0"; + status = "okay"; + interrupts = <0 3 1 + 0 23 1 + 0 32 1 + 0 43 1 + 0 44 1 + 0 45 1>; + interrupt-names = "vsync", + "demux", + "parser", + "mailbox_0", + "mailbox_1", + "mailbox_2"; + }; + picdec { + compatible = "amlogic, picdec"; + memory-region = <&picdec_cma_reserved>; + dev_name = "picdec"; + status = "okay"; + }; + ppmgr { + compatible = "amlogic, ppmgr";//to match of_device_id's compatible member + memory-region = <&ion_reserved>; + dev_name = "ppmgr"; + status = "okay"; + }; + deinterlace { + compatible = "amlogic, deinterlace"; + status = "okay"; + memory-region = <&di_reserved>; + interrupts = <0 46 1 + 0 6 1>; + interrupt-names = "de_irq", + "timerc"; + buffer-size = <3133440>; //1920x1088x3/2 + hw-version = <2>; + }; +/* vdin0 { + compatible = "amlogic, vdin"; + memory-region = <&vdin0_reserved>; + dev_name = "vdin0"; + status = "ok"; + reserve-iomap = "true"; + interrupts = <0 83 1>; + rdma-irq = <2>; + clocks = <&clock CLK_XTAL>, + <&clock CLK_VID_LOCK_CLK>; + clock-names = "xtal", "cts_vid_lock_clk"; + vdin_id = <0>; + }; + vdin1 { + compatible = "amlogic, vdin"; + memory-region = <&vdin1_reserved>; + dev_name = "vdin1"; + status = "ok"; + reserve-iomap = "true"; + interrupts = <0 85 1>; + rdma-irq = <4>; + clocks = <&clock CLK_XTAL>, + <&clock CLK_VID_LOCK_CLK>; + clock-names = "xtal", "cts_vid_lock_clk"; + vdin_id = <1>; + };*/ + + amvdec_656in0 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in0"; + status = "ok"; + reg = <0x0 0xd0048000 0x0 0x7c>; + clocks = <&clock CLK_FPLL_DIV2>, + <&clock CLK_BT656_CLK0>; + clock-names = "fclk_div2", "cts_bt656_clk0"; + bt656_id = <0>; + }; + amvdec_656in1 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in1"; + status = "ok"; + reg = <0x0 0xd0050000 0x0 0x7c>; + clocks = <&clock CLK_FPLL_DIV2>, + <&clock CLK_BT656_CLK1>; + clock-names = "fclk_div2", "cts_bt656_clk1"; + bt656_id = <1>; + }; + + amvenc_avc{ + compatible = "amlogic, amvenc_avc"; + //memory-region = <&amvenc_avc_reserved>; + dev_name = "amvenc_avc"; + status = "okay"; + interrupts = <0 45 1>; + interrupt-names = "mailbox_2"; + }; + + /*vm0 { + compatible = "amlogic, vm"; + memory-region = <&vm0_cma_reserved>; + dev_name = "vm0"; + status = "okay"; + vm_id = <0>; + }; + + vm1 { + compatible = "amlogic, vm"; + memory-region = <&vm1_cma_reserved>; + dev_name = "vm1"; + status = "okay"; + vm_id = <1>; + };*/ + + vpu { + compatible = "amlogic, vpu"; + dev_name = "vpu"; + status = "ok"; + clk_level = <7>; + /** 0: 100.0M 1: 166.7M 2: 200.0M + 3: 250.0M 4: 333.3M 5: 400.0M + 6: 500.0M 7: 666.7M */ + }; + bt-dev{ + compatible = "amlogic, bt-dev"; + dev_name = "bt-dev"; + status = "ok"; + gpio_reset = <&gpio GPIOX_20 GPIO_ACTIVE_HIGH>; + //power_low_level; + }; + bluesleep{ + compatible = "amlogic, bluesleep"; + dev_name = "bluesleep"; + status = "ok"; + interrupts = < 0 70 1>; + bt_port_id = < 1 >; + //bt_ext_wake = <&gpio GPIOX_22 GPIO_ACTIVE_HIGH>; + bt_host_wake = <&gpio GPIOX_21 GPIO_ACTIVE_HIGH>; + }; + + rtc{ + compatible = "amlogic, aml_vrtc"; + alarm_reg_addr = <0xc81000a8>; + timer_e_addr = <0xc1109988>; + init_date = "2015/01/01"; + status = "okay"; + }; + + wifi{ + compatible = "amlogic, aml_wifi"; + dev_name = "aml_wifi"; + status = "okay"; + interrupt_pin = <&gpio GPIOX_7 GPIO_ACTIVE_HIGH>; + interrupts = < 0 68 4>; + irq_trigger_type = "GPIO_IRQ_LOW"; + power_on_pin = <&gpio GPIOX_6 GPIO_ACTIVE_HIGH>; + dhd_static_buf; + pinctrl-names = "wifi_32k_pins"; + pinctrl-0 = <&wifi_32k_pins>; + }; + sd{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0072000 0x0 0x2000>; + interrupts = < 0 217 1 + 0 67 1 + 0 69 1>; + pinctrl-names = "sd_clk_cmd_pins", "sd_all_pins", "sd_1bit_pins","sd_clk_cmd_uart_pins","sd_1bit_uart_pins", "sd_to_ao_uart_pins", "ao_to_sd_uart_pins","ao_to_sd_jtag_pins","sd_to_ao_jtag_pins"; + pinctrl-0 = <&sd_clk_cmd_pins>; + pinctrl-1 = <&sd_all_pins>; + pinctrl-2 = <&sd_1bit_pins>; + pinctrl-3 = <&sd_clk_cmd_uart_pins>; + pinctrl-4 = <&sd_1bit_uart_pins>; + pinctrl-5 = <&sd_to_ao_uart_pins>; + pinctrl-6 = <&ao_to_sd_uart_pins>; + pinctrl-7 = <&ao_to_sd_jtag_pins>; + pinctrl-8 = <&sd_to_ao_jtag_pins>; + + sd{ + status = "okay"; + port = <1>; /**0:sdio_a, 1:sdio_b, 2:sdio_c, 3:sdhc_a, 4:sdhc_b, 5:sdhc_c */ + pinname = "sd"; + ocr_avail = <0x00200080>; // 3.3:0x200000, 1.8+3.3:0x00200080 + caps = "MMC_CAP_4_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED"; + //"MMC_CAP_UHS_SDR12", + //"MMC_CAP_UHS_SDR25","MMC_CAP_UHS_SDR50", + //"MMC_CAP_UHS_SDR104"; + f_min = <400000>; + f_max = <100000000>; + max_req_size = <0x20000>; /**128KB*/ + gpio_dat3 = <&gpio CARD_4 GPIO_ACTIVE_HIGH>; + jtag_pin = <&gpio CARD_0 GPIO_ACTIVE_HIGH>; + gpio_cd = <&gpio CARD_6 GPIO_ACTIVE_HIGH>; + irq_in = <3>; + irq_out = <5>; + card_type = <5>; /* 0:unknown, 1:mmc card(include eMMC), 2:sd card(include tSD), 3:sdio device(ie:sdio-wifi), 4:SD combo (IO+mem) card, 5:NON sdio device(means sd/mmc card), other:reserved */ + }; + }; + emmc{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0074000 0x0 0x2000>; + interrupts = < 0 218 1>; + pinctrl-names = "emmc_clk_cmd_pins", "emmc_all_pins"; + pinctrl-0 = <&emmc_clk_cmd_pins>; + pinctrl-1 = <&emmc_all_pins>; + emmc{ + status = "okay"; + pinname = "emmc"; + ocr_avail = <0x200080>; /**VDD voltage 3.3 ~ 3.4 */ + caps = "MMC_CAP_8_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE","MMC_CAP_1_8V_DDR", + "MMC_CAP_HW_RESET", "MMC_CAP_ERASE", "MMC_CAP_CMD23"; + caps2 = "MMC_CAP2_HS200"; + f_min = <300000>; + f_max = <200000000>; + tx_phase = <0>; + max_req_size = <0x20000>; /**256KB*/ +// gpio_dat3 = "BOOT_3" + gpio_dat3 = <&gpio BOOT_3 GPIO_ACTIVE_HIGH>; + hw_reset = <&gpio BOOT_9 GPIO_ACTIVE_HIGH>; + card_type = <1>; /* 1:mmc card(include eMMC), 2:sd card(include tSD), */ + }; + }; + sdio{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0070000 0x0 0x2000>; + interrupts = < 0 216 1>; + pinctrl-names = "sdio_clk_cmd_pins", "sdio_all_pins"; + pinctrl-0 = <&sdio_clk_cmd_pins>; + pinctrl-1 = <&sdio_all_pins>; + sdio{ + status = "okay"; + pinname = "sdio"; + ocr_avail = <0x00200080>; /*3.3:0x200000, 1.8+3.3:0x00200080 */ + caps = "MMC_CAP_4_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", + "MMC_CAP_UHS_SDR12","MMC_CAP_UHS_SDR25", + "MMC_CAP_UHS_SDR50","MMC_CAP_UHS_SDR104", + "MMC_PM_KEEP_POWER"; + f_min = <400000>; + f_max = <200000000>; + max_req_size = <0x20000>; /**128KB*/ + card_type = <3>; /*3:sdio device(ie:sdio-wifi), 4:SD combo (IO+mem) card, */ + }; + }; + nand{ + compatible = "amlogic, aml_nand"; + dev_name = "nand"; + status = "ok"; + reg = <0x0 0xd0074800 0x0 0x200>; + interrupts = < 0 34 1 >; + pinctrl-names = "nand_rb_mod","nand_norb_mod", "nand_cs_pins_only"; + pinctrl-0 = <&conf_nand_pulldown &conf_nand_pullup &all_nand_pins>; + pinctrl-1 = <&conf_nand_pulldown &conf_nand_pullup &all_nand_pins>; + pinctrl-2 = <&nand_cs_pins>; + device_id = <0>; + plat-names = "nandnormal"; + plat-num = <1>; + plat-part-0 = <&normal>; + normal: normal{ + enable_pad ="ce0","ce1","ce2","ce3"; + busy_pad = "rb0"; + }; + }; + aml_nftl{ + compatible = "amlogic, nftl"; + /* config nftl here */ + + }; + /*aml_cams{ + compatible = "amlogic, cams_prober"; + status = "okay"; + clocks = <&clock CLK_CAMERA_24M>; + clock-names = "clk_camera_24"; + pinctrl-names = "cam_gpio_a", "cam_gpio_b","cam_all"; + pinctrl-0 = <&cam_gpio_a> ; + pinctrl-1 = <&cam_gpio_b> ; + pinctrl-2 = <&cam_gpio_a &cam_gpio_b> ; + cam_0{ + cam_name = "sp2518"; + front_back = <0>; + i2c_bus = "i2c_bus_a"; + gpio_pwdn-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_HIGH>; + gpio_rst-gpios = <&gpio GPIOZ_12 GPIO_ACTIVE_HIGH>; + mirror_flip = <1>; + vertical_flip = <1>; + spread_spectrum = <0>; //0:none; 1:0.3%; 2:0.6%; 3:1.25%; 4:2.5%; 5:5% + bt_path = "gpio"; + bt_path_count = <2>; + vdin_path = <0>; + status = "okay"; + }; + cam_1{ + cam_name = "sp0838"; + front_back = <1>; + i2c_bus = "i2c_bus_a"; + gpio_pwdn-gpios = <&gpio GPIOZ_13 GPIO_ACTIVE_HIGH>; + gpio_rst-gpios = <&gpio GPIOZ_12 GPIO_ACTIVE_HIGH>; + mirror_flip = <1>; + vertical_flip = <1>; + spread_spectrum = <0>; //0:none; 1:0.3%; 2:0.6%; 3:1.25%; 4:2.5%; 5:5% + bt_path = "gpio_b"; + bt_path_count = <2>; + vdin_path = <1>; + status = "okay"; + }; + };*/ + partitions: partitions{ + parts = <11>; + part-0 = <&logo>; + part-1 = <&recovery>; + part-2 = <&rsv>; + part-3 = <&tee>; + part-4 = <&crypt>; + part-5 = <&misc>; + part-6 = <&instaboot>; + part-7 = <&boot>; + part-8 = <&system>; + part-9 = <&cache>; + part-10 = <&data>; + logo:logo{ + pname = "logo"; + size = <0x0 0x2000000>; + mask = <1>; + }; + recovery:recovery{ + pname = "recovery"; + size = <0x0 0x2000000>; + mask = <1>; + }; + rsv:rsv{ + pname = "rsv"; + size = <0x0 0x800000>; + mask = <1>; + }; + tee:tee{ + pname = "tee"; + size = <0x0 0x800000>; + mask = <1>; + }; + crypt:crypt{ + pname = "crypt"; + size = <0x0 0x2000000>; + mask = <1>; + }; + misc:misc{ + pname = "misc"; + size = <0x0 0x2000000>; + mask = <1>; + }; + instaboot:instaboot{ + pname = "instaboot"; + size = <0x0 0x20000000>; + mask = <1>; + }; + boot:boot + { + pname = "boot"; + size = <0x0 0x2000000>; + mask = <1>; + }; + system:system + { + pname = "system"; + size = <0x0 0x40000000>; + mask = <1>; + }; + cache:cache + { + pname = "cache"; + size = <0x0 0x20000000>; + mask = <2>; + }; + data:data + { + pname = "data"; + size = <0xffffffff 0xffffffff>; + mask = <4>; + }; + }; + unifykey{ + compatible = "amlogic, unifykey"; + status = "ok"; + + unifykey-num = <14>; + unifykey-index-0 = <&keysn_0>; + unifykey-index-1 = <&keysn_1>; + unifykey-index-2 = <&keysn_2>; + unifykey-index-3 = <&keysn_3>; + unifykey-index-4 = <&keysn_4>; + unifykey-index-5 = <&keysn_5>; + unifykey-index-6 = <&keysn_6>; + unifykey-index-7 = <&keysn_7>; + unifykey-index-8 = <&keysn_8>; + unifykey-index-9 = <&keysn_9>; + unifykey-index-10= <&keysn_10>; + unifykey-index-11= <&keysn_11>; + unifykey-index-12= <&keysn_12>; + unifykey-index-13= <&keysn_13>; + + keysn_0: key_0{ + key-name = "usid"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_1:key_1{ + key-name = "mac"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_2:key_2{ + key-name = "hdcp"; + key-device = "secure"; + key-type = "sha1"; + key-permit = "read","write","del"; + }; + keysn_3:key_3{ + key-name = "secure_boot_set"; + key-device = "efuse"; + key-permit = "write"; + }; + keysn_4:key_4{ + key-name = "mac_bt"; + key-device = "normal"; + key-permit = "read","write","del"; + key-type = "mac"; + }; + keysn_5:key_5{ + key-name = "mac_wifi"; + key-device = "normal"; + key-permit = "read","write","del"; + key-type = "mac"; + }; + keysn_6:key_6{ + key-name = "hdcp2_tx"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_7:key_7{ + key-name = "hdcp2_rx"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_8:key_8{ + key-name = "widevinekeybox"; + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_9:key_9{ + key-name = "deviceid"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_10:key_10{ + key-name = "hdcp22_fw_private"; + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_11:key_11{ + key-name = "PlayReadykeybox25"; + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_12:key_12{ + key-name = "prpubkeybox";// PlayReady + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_13:key_13{ + key-name = "prprivkeybox";// PlayReady + key-device = "secure"; + key-permit = "read","write","del"; + }; + };//End unifykey + amhdmitx: amhdmitx{ + compatible = "amlogic, amhdmitx"; + dev_name = "amhdmitx"; + status = "okay"; + pinctrl-names="hdmitx_hpd", "hdmitx_ddc"; + pinctrl-0=<&hdmitx_hpd>; + pinctrl-1=<&hdmitx_ddc>; + /* HPD, 57 + 32 = 89; CEC, 151 + 32 = 183*/ + interrupts = <0 57 1>; + interrupt-names = "hdmitx_hpd"; + clocks = <&clock CLK_HDMITX_SYS &clock CLK_HDMITX_ENCP + &clock CLK_HDMITX_ENCI &clock CLK_HDMITX_PIXEL + &clock CLK_HDMITX_PHY &clock CLK_VID>; + clock-names = "hdmitx_clk_sys", "hdmitx_clk_encp", "hdmitx_clk_enci", + "hdmitx_clk_pixel", "hdmitx_clk_phy", "hdmitx_clk_vid"; + /* hdcp14_en = <0x82000010>; */ + /* hdcp14_rslt = <0x82000011>; */ + gpio_i2c_en = <0x1>; + ranges; + #address-cells = <2>; + #size-cells = <2>; + }; + aocec: aocec{ + compatible = "amlogic, amlogic-aocec"; + status = "okay"; + vendor_name = "WeTek"; /* Max Chars: 8 */ + vendor_id = <0x000000>; /* Refer to http://standards.ieee.org/develop/regauth/oui/oui.txt */ + product_desc = "WeTek Hub"; /* Max Chars: 16 */ + cec_osd_string = "Hub"; /* Max Chars: 14 */ + port_num = <1>; + arc_port_mask = <0x0>; + interrupts = <0 199 1>; + interrupt-names = "hdmi_aocec"; + pinctrl-names = "hdmitx_aocec"; + pinctrl-0=<&hdmitx_aocec>; + reg = <0x0 0xc810023c 0x0 0x4 + 0x0 0xc8100000 0x0 0x200>; + }; + + tvout { + compatible = "amlogic, tvout"; + dev_name = "tvout"; + status = "okay"; + }; + + i2c_gpio: i2c_gpio { + compatible = "i2c-gpio"; + dev_name = "i2c-gpio"; + i2c-gpio,delay-us = <10>; /* 50 kHz */ + gpios = <&gpio GPIOH_1 0 + &gpio GPIOH_2 0>; + #address-cells = <2>; + #size-cells = <2>; + i2c-gpio,timeout-ms = <10>; + i2c_gpio_edid: i2c_gpio_edid { + compatible = "i2c-gpio-edid"; + reg = <0x50 0x0 0x0 0x0>; + }; + }; + + uart_AO: serial@c81004c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004c0 0x0 0x14>; + interrupts = <0 193 1>; + status = "okay"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 64 >; + pinctrl-names = "default"; + //pinctrl-0 = <&ao_uart_pins>; + support-sysrq = <0>; /* 0 not support , 1 support */ + }; + uart_A: serial@c11084c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084c0 0x0 0x14>; + interrupts = <0 26 1>; + status = "okay"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 128 >; + pinctrl-names = "default"; + pinctrl-0 = <&a_uart_pins>; + resets = <&clock GCLK_IDX_UART0>; + }; + + + canvas{ + compatible = "amlogic, meson, canvas"; + dev_name = "amlogic-canvas"; + status = "ok"; + reg = <0x0 0xc8838000 0x0 0x400>; + }; + + rdma{ + compatible = "amlogic, meson, rdma"; + dev_name = "amlogic-rdma"; + status = "ok"; + interrupts = <0 89 1>; + interrupt-names = "rdma"; + }; + + dwc2_b { + compatible = "amlogic,dwc2"; + device_name = "dwc2_b"; + reg = <0x0 0xc9100000 0x0 0x40000>; + interrupts = <0 31 4>; + status = "okay"; + pl-periph-id = <1>; /** lm name */ + clock-src = "usb1"; /** clock src */ + port-id = <1>; /** ref to mach/usb.h */ + port-type = <1>; /** 0: otg, 1: host, 2: slave */ + port-speed = <0>; /** 0: default, 1: high, 2: full */ + port-config = <0>; /** 0: default */ + port-dma = <0>; /** 0: default, 1: single, 2: incr, 3: incr4, 4: incr8, 5: incr16, 6: disable*/ + port-id-mode = <1>; /** 0: hardware, 1: sw_host, 2: sw_slave*/ + phy-reg = <0xc0000020>; + phy-reg-size = <0x20>; + usb-fifo = <1024>; + host-only-core = <1>; + pmu-apply-power = <1>; + cpu-type = "gxbaby"; + resets = <&clock GCLK_IDX_USB_GENERAL + &clock GCLK_IDX_MISC_USB1_TO_DDR + &clock GCLK_IDX_USB1>; + reset-names = "usb_general", + "usb1", + "usb1_to_ddr"; + }; + + dwc2_a { + compatible = "amlogic,dwc2"; + device_name = "dwc2_a"; + reg = <0x0 0xc9000000 0x0 0x40000>; + interrupts = <0 30 4>; + status = "okay"; + pl-periph-id = <0>; /** lm name */ + clock-src = "usb0"; /** clock src */ + port-id = <0>; /** ref to mach/usb.h */ + port-type = <0>; /** 0: otg, 1: host, 2: slave */ + port-speed = <0>; /** 0: default, high, 1: full */ + port-config = <0>; /** 0: default */ + port-dma = <0>; /** 0: default, 1: single, 2: incr, 3: incr4, 4: incr8, 5: incr16, 6: disable*/ + port-id-mode = <0>; /** 0: hardware, 1: sw_host, 2: sw_slave*/ + gpio-vbus-power = "GPIODV_24"; + gpios = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>; + gpio-work-mask = <1>; /**0: work on pulldown,1:work on pullup*/ + phy-reg = <0xc0000000>; + phy-reg-size = <0x20>; + usb-fifo = <1024>; + cpu-type = "gxbaby"; + resets = <&clock GCLK_IDX_USB_GENERAL + &clock GCLK_IDX_MISC_USB0_TO_DDR + &clock GCLK_IDX_USB0>; + reset-names = "usb_general", + "usb0", + "usb0_to_ddr"; + }; + + /* AUDIO MESON8 DEVICES */ + i2s_dai: I2S { + #sound-dai-cells = <0>; + resets = < + &clock GCLK_IDX_AIU_AI_TOP_GLUE + &clock GCLK_IDX_AUD_BUF_ABD + &clock GCLK_IDX_AIU_I2S_OUT + &clock GCLK_IDX_AIU_AMCLK_MEASURE + &clock GCLK_IDX_AIU_AIFIFO2 + &clock GCLK_IDX_AIU_AUD_MIXER + &clock GCLK_IDX_AIU_MIXER_REG + &clock GCLK_IDX_AIU_ADC + &clock GCLK_IDX_AIU_TOP_LEVEL + &clock GCLK_IDX_AIU_AOCLK + &clock GCLK_IDX_AUD_IN + >; + reset-names = + "top_glue", + "aud_buf", + "i2s_out", + "amclk_measure", + "aififo2", + "aud_mixer", + "mixer_reg", + "adc", + "top_level", + "aoclk", + "aud_in"; + clocks = <&clock CLK_MPLL2>, + <&clock CLK_AMCLK>; + clock-names = "mpll2", "mclk"; + compatible = "amlogic, aml-i2s-dai"; + }; + spdif_dai: SPDIF { + #sound-dai-cells = <0>; + compatible = "amlogic, aml-spdif-dai"; + resets = < + &clock GCLK_IDX_AIU_IEC958 + &clock GCLK_IDX_AIU_ICE958_AMCLK + >; + reset-names = + "iec958", + "iec958_amclk"; + clocks = <&clock CLK_MPLL1>, + <&clock CLK_I958>, + <&clock CLK_AMCLK>, + <&clock CLK_SPDIF>, + <&clock CLK_81>; + clock-names = "mpll1", "i958", "mclk", "spdif", "clk_81"; + }; + pcm_dai: PCM { + #sound-dai-cells = <0>; + compatible = "amlogic, aml-pcm-dai"; + pinctrl-names = "aml_audio_btpcm"; + pinctrl-0 = <&audio_btpcm_pins>; + clocks = <&clock CLK_MPLL0>, + <&clock CLK_PCM_MCLK>, + <&clock CLK_PCM_SCLK>; + clock-names = "mpll0", "pcm_mclk", "pcm_sclk"; + pcm_mode = <1>; /* 0=slave mode, 1=master mode */ + }; + i2s_plat: i2s_platform { + compatible = "amlogic, aml-i2s"; + interrupts = <0 29 1>; + }; + pcm_plat: pcm_platform { + compatible = "amlogic, aml-pcm"; + }; + spdif_codec: spdif_codec { + #sound-dai-cells = <0>; + compatible = "amlogic, aml-spdif-codec"; + device_name = "dummy-spdif-dit.0"; + pinctrl-names = "aml_audio_spdif"; + pinctrl-0 = <&audio_spdif_pins>; + }; + pcm_codec: pcm_codec{ + #sound-dai-cells = <0>; + compatible = "amlogic, pcm2BT-codec"; + }; + /* endof AUDIO MESON8 DEVICES */ + + /* AUDIO board specific */ + dummy_codec:dummy{ + #sound-dai-cells = <0>; + compatible = "amlogic, aml_dummy_codec"; + status = "okay"; + }; + aml_m8_snd { + compatible = "aml, aml_snd_m8"; + status = "okay"; + aml-sound-card,format = "i2s"; + aml_sound_card,name = "AML-M8AUDIO"; + aml,audio-routing = + "Ext Spk","LOUTL", + "Ext Spk","LOUTR"; + + mute_gpio-gpios = <&gpio GPIOH_3 0>; + hp_disable; + hp_paraments = <800 300 0 5 1>; + pinctrl-names = "aml_snd_m8"; + pinctrl-0 = <&audio_pins>; + cpu_list = <&cpudai0 &cpudai1 &cpudai2>; + codec_list = <&codec0 &codec1 &codec2>; + plat_list = <&i2s_plat &i2s_plat &pcm_plat>; + cpudai0: cpudai0 { + sound-dai = <&i2s_dai>; + }; + cpudai1: cpudai1 { + sound-dai = <&spdif_dai>; + }; + cpudai2: cpudai2 { + sound-dai = <&pcm_dai>; + }; + codec0: codec0 { + sound-dai = <&dummy_codec>; + }; + codec1: codec1 { + sound-dai = <&spdif_codec>; + }; + codec2: codec2 { + sound-dai = <&pcm_codec>; + }; + }; + /* END OF AUDIO board specific */ + + gpio_keypad{ + compatible = "amlogic, gpio_keypad"; + status = "okay"; + scan_period = <20>; + key_num = <1>; + key_name = "power"; + key_code = <116>; + key_pin = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>; /*"GPIOAO_3";*/ + irq_keyup = <6>; + irq_keydown = <7>; + }; + + adc_keypad{ + compatible = "amlogic, adc_keypad"; + status = "okay"; + key_name = "menu", "vol-","vol+", "esc", "home"; + key_num = <5>; + key_code = <139 114 115 1 102>; + key_chan = <0 0 0 0 0>; + key_val = <0 143 271 393 510>; //voltage=0/252/478/692/824mV, val=voltage/1800mV*1023 + key_tolerance = <40 40 40 40 40>; + }; + + sysled { + compatible = "amlogic, sysled"; + dev_name = "sysled"; + status = "okay"; + led_gpio = <&gpio_ao GPIOAO_13 GPIO_ACTIVE_HIGH>; + led_active_low = <1>; + }; + aml_sensor0: aml-sensor@0 { + compatible = "amlogic, aml-thermal"; + device_name = "thermal"; + #thermal-sensor-cells = <1>; + cooling_devices { + cpufreq_cool_cluster0 { + min_state = <1000000>; + dyn_coeff = <140>; + cluster_id = <0>; + node_name = "cpus"; + device_type = "cpufreq"; + }; + cpucore_cool_cluster0 { + min_state = <1>; + dyn_coeff = <0>; + cluster_id = <0>; + node_name = "cpu_core_cluster0"; + device_type = "cpucore"; + }; + gpufreq_cool { + min_state = <400>; + dyn_coeff = <437>; + cluster_id = <0>; + node_name = "mali"; + device_type = "gpufreq"; + }; + gpucore_cool { + min_state = <1>; + dyn_coeff = <0>; + cluster_id = <0>; + node_name = "thermal_gpu_cores"; + device_type = "gpucore"; + }; + }; + cpu_cluster0:cpu_core_cluster0 { + #cooling-cells = <2>; /* min followed by max */ + }; + gpucore:thermal_gpu_cores { + #cooling-cells = <2>; /* min followed by max */ + }; + }; + thermal-zones { + soc_thermal { + polling-delay = <1000>; + polling-delay-passive = <100>; + sustainable-power = <2150>; + + thermal-sensors = <&aml_sensor0 3>; + + trips { + switch_on: trip-point@0 { + temperature = <70000>; + hysteresis = <1000>; + type = "passive"; + }; + control: trip-point@1 { + temperature = <80000>; + hysteresis = <1000>; + type = "passive"; + }; + hot: trip-point@2 { + temperature = <85000>; + hysteresis = <5000>; + type = "hot"; + }; + critical: trip-point@3 { + temperature = <260000>; + hysteresis = <1000>; + type = "critical"; + }; + }; + + cooling-maps { + cpufreq_cooling_map { + trip = <&control>; + cooling-device = <&cpus 0 4>; + contribution = <1024>; + }; + cpucore_cooling_map { + trip = <&control>; + cooling-device = <&cpu_cluster0 0 3>; + contribution = <1024>; + }; + gpufreq_cooling_map { + trip = <&control>; + cooling-device = <&gpu 0 4>; + contribution = <1024>; + }; + gpucore_cooling_map { + trip = <&control>; + cooling-device = <&gpucore 0 2>; + contribution = <1024>; + }; + }; + }; + }; + +/* + dvb { + compatible = "amlogic, dvb"; + dev_name = "dvb"; + //"parallel","serial","disable" + ts0 = "parallel"; + ts0_control = <0>; + ts0_invert = <0>; + pinctrl-names = "p_ts0", "s_ts0"; + pinctrl-0 = <&dvb_p_ts0_pins>; + pinctrl-1 = <&dvb_s_ts0_pins>; + resets = <&clock GCLK_IDX_DEMUX + &clock GCLK_IDX_ASYNC_FIFO + &clock GCLK_IDX_AHB_ARB0 + &clock GCLK_IDX_HIU_PARSER_TOP>; + reset-names = "demux", "asyncfifo", "ahbarb0", "uparsertop"; + }; + dvbfe { + compatible = "amlogic, dvbfe"; + dev_name = "dvbfe"; + dtv_demod0 = "Mxl241"; + dtv_demod0_i2c_adap_id = <2>; + dtv_demod0_i2c_addr = <0x60>; + dtv_demod0_reset_value = <0>; + dtv_demod0_reset_gpio-gpios = <&gpio GPIOY_12 GPIO_ACTIVE_HIGH>; + fe0_dtv_demod = <0>; + fe0_ts = <0>; + fe0_dev = <0>; + }; +*/ +}; +&i2c_a { + status = "disabled"; + /*p200: multiplex with usb PWR, disbaled*/ +}; +/* +&i2c_b { + status = "okay"; +}; +*/ + +&i2c_slave { + status = "disabled"; +}; +&pinmux { + audio_pins:audio_pin{ + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins = "GPIOAO_8","GPIOAO_9","GPIOAO_10","GPIOAO_11"; + }; + + audio_spdif_pins:audio_pin1{ + amlogic,setmask=; /*spdif_out*/ + amlogic,clrmask=; /*spdif_out*/ + amlogic,pins ="GPIOAO_6"; /*spdif_out*/ + }; + + audio_btpcm_pins:audio_btpcm_pins{ + /* BT PCM PINMUX SETTING*/ + amlogic,setmask=<3 0x78000000>; + amlogic,clrmask=<3 0x803280 + 4 0xc0>; + amlogic,pins ="GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11"; + }; +}; + +&efuse { + status = "okay"; +}; +&audio_data{ + status = "okay"; +}; +&defendkey { + status = "okay"; +}; +&meson_ir { + status = "okay"; +}; diff --git a/arch/arm64/boot/dts/amlogic/gxbb_p200_2G.dts b/arch/arm64/boot/dts/amlogic/gxbb_p200_2G.dts index 4fcf4fe924c82..6ca4b05dff5b3 100644 --- a/arch/arm64/boot/dts/amlogic/gxbb_p200_2G.dts +++ b/arch/arm64/boot/dts/amlogic/gxbb_p200_2G.dts @@ -465,7 +465,7 @@ "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_UHS_SDR12","MMC_CAP_UHS_SDR25", "MMC_CAP_UHS_SDR50","MMC_CAP_UHS_SDR104", - "MMC_PM_KEEP_POWER"; + "MMC_PM_KEEP_POWER","MMC_CAP_SDIO_IRQ"; f_min = <400000>; f_max = <200000000>; max_req_size = <0x20000>; /**128KB*/ @@ -591,7 +591,7 @@ system:system { pname = "system"; - size = <0x0 0x40000000>; + size = <0x0 0x60000000>; mask = <1>; }; cache:cache @@ -822,11 +822,11 @@ pl-periph-id = <0>; /** lm name */ clock-src = "usb0"; /** clock src */ port-id = <0>; /** ref to mach/usb.h */ - port-type = <0>; /** 0: otg, 1: host, 2: slave */ + port-type = <1>; /** 0: otg, 1: host, 2: slave */ port-speed = <0>; /** 0: default, high, 1: full */ port-config = <0>; /** 0: default */ port-dma = <0>; /** 0: default, 1: single, 2: incr, 3: incr4, 4: incr8, 5: incr16, 6: disable*/ - port-id-mode = <0>; /** 0: hardware, 1: sw_host, 2: sw_slave*/ + port-id-mode = <1>; /** 0: hardware, 1: sw_host, 2: sw_slave*/ gpio-vbus-power = "GPIODV_24"; gpios = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>; gpio-work-mask = <1>; /**0: work on pulldown,1:work on pullup*/ @@ -1142,9 +1142,9 @@ }; audio_spdif_pins:audio_pin1{ - amlogic,setmask=; /*spdif_out*/ - amlogic,clrmask=; /*spdif_out*/ - amlogic,pins ="GPIOAO_6"; /*spdif_out*/ + amlogic,setmask=<1 0x200>; /*spdif_out*/ + amlogic,clrmask=<1 0x10000>; /*spdif_out*/ + amlogic,pins ="GPIOY_12"; /*spdif_out*/ }; audio_btpcm_pins:audio_btpcm_pins{ diff --git a/arch/arm64/boot/dts/amlogic/gxbb_p200_2G_wetek_play_2.dts b/arch/arm64/boot/dts/amlogic/gxbb_p200_2G_wetek_play_2.dts new file mode 100644 index 0000000000000..a5c8f824d26af --- /dev/null +++ b/arch/arm64/boot/dts/amlogic/gxbb_p200_2G_wetek_play_2.dts @@ -0,0 +1,1171 @@ +/* + * Amlogic Ltd. GXBaby Plaform + * + */ + +/dts-v1/; + +#include +#include +#include +#include +#include +#include "mesongxbb.dtsi" +/ { + model = "Amlogic"; + amlogic-dt-id = "gxb_p200_2g"; + compatible = "amlogic, Gxbb"; + interrupt-parent = <&gic>; + #address-cells = <2>; + #size-cells = <2>; + + aliases { + serial0 = &uart_AO; + serial1 = &uart_A; + }; + + gpu_dvfs_tbl:gpu_dvfs_tbl { + sc_mpp = <3>;/* number of pp used most of time.*/ + tbl = <&clk285_cfg &clk400_cfg &clk500_cfg &clk666_cfg &clk800_cfg>; + }; + + memory@00000000 { + device_type = "memory"; + linux,usable-memory = <0x0 0x1000000 0x0 0x7f000000>; + }; + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + /* global autoconfigured region for contiguous allocations */ + secmon_reserved:linux,secmon { + compatible = "amlogic, aml_secmon_memory"; + reg = <0x0 0x10000000 0x0 0x200000>; + no-map; + }; + secos_reserved:linux,secos { + status = "disable"; + compatible = "amlogic, aml_secos_memory"; + reg = <0x0 0x05300000 0x0 0x2000000>; + no-map; + }; + pstore:aml_pstore { + compatible = "amlogic, pstore"; + reg = <0x0 0x07300000 0x0 0x100000>; + no-map; + }; + fb_reserved:linux,meson-fb { + compatible = "amlogic, fb-memory"; + size = <0x0 0x1900000>; + no-map; + }; + + di_reserved:linux,di { + compatible = "amlogic, di-mem"; + size = <0x0 0x1e00000>; //10x1920x1088x3/2=30M + //no-map; + multi-use; + }; + + ion_reserved:linux,ion-dev { + compatible = "amlogic, idev-mem"; + size = <0x0 0x2000000>; + multi-use; + }; + + /* vdin0 */ +// vdin0_reserved:linux,vdin0 { +// compatible = "amlogic, vdin_memory"; + /* 1920x1080x2x4 =17M */ +// size = <0x0 0x01000000>; +// }; + /* vdin1 */ +// vdin1_reserved:linux,vdin1 { +// compatible = "amlogic, vdin_memory"; + /* 1920x1080x2x4 =17M */ +// size = <0x0 0x01000000>; +// }; + /* POST PROCESS MANAGER */ + //ppmgr_reserved:linux,ppmgr { + // compatible = "amlogic, ppmgr_memory"; + // size = <0x0 0x2000000>; + //}; + + codec_mm_cma:linux,codec_mm_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0xc000000>; + alignment = <0x0 0x400000>; + linux,contiguous-region; + }; + picdec_cma_reserved:linux,picdec { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x0>; + status = "disabled"; + alignment = <0x0 0x400000>; + linux,contiguous-region; + }; + /*vm0_cma_reserved:linux,vm0_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x2000000>; + alignment = <0x0 0x400000>; + }; + vm1_cma_reserved:linux,vm1_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x2000000>; + alignment = <0x0 0x400000>; + };*/ + /* codec shared reserved */ + codec_mm_reserved:linux,codec_mm_reserved { + compatible = "amlogic, codec-mm-reserved"; + size = <0x0 0x4100000>; + alignment = <0x0 0x100000>; + //no-map; + }; + }; + + meson-vout { + compatible = "amlogic, meson-vout"; + dev_name = "meson-vout"; + status = "okay"; + }; + meson-fb { + compatible = "amlogic, meson-fb"; + memory-region = <&fb_reserved>; + dev_name = "meson-fb"; + status = "okay"; + interrupts = <0 3 1 + 0 89 1>; + interrupt-names = "viu-vsync", "rdma"; + mem_size = <0x01800000 0x00100000>; /* fb0/fb1 memory size */ + display_mode_default = "1080p60hz"; + scale_mode = <1>; /** 0:VPU free scale 1:OSD free scale 2:OSD super scale */ + display_size_default = <1920 1080 1920 3240 32>; //1920*1080*4*3 = 0x17BB000 + }; + ge2d { + compatible = "amlogic, ge2d"; + dev_name = "ge2d"; + status = "okay"; + interrupts = <0 150 1>; + interrupt-names = "ge2d"; + clocks = <&clock CLK_VAPB_0>, + <&clock CLK_GE2D>; + clock-names = "clk_vapb_0", + "clk_ge2d"; + resets = <&clock GCLK_IDX_GE2D>; + reset-names = "ge2d"; + }; + codec_io { + compatible = "amlogic, codec_io"; + #address-cells=<2>; + #size-cells=<2>; + ranges; + io_cbus_base{ + reg = <0x0 0xC1100000 0x0 0x100000>; + }; + io_dos_base{ + reg = <0x0 0xc8820000 0x0 0x10000>; + }; + io_hiubus_base{ + reg = <0x0 0xc883c000 0x0 0x2000>; + }; + io_aobus_base{ + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + io_vcbus_base{ + reg = <0x0 0xd0100000 0x0 0x40000>; + }; + io_dmc_base{ + reg = <0x0 0xc8838000 0x0 0x400>; + }; + }; + codec_mm { + compatible = "amlogic, codec, mm"; + memory-region = <&codec_mm_cma &codec_mm_reserved>; + dev_name = "codec_mm"; + status = "okay"; + }; + ethmac: ethernet@0xc9410000{ + compatible = "amlogic, gxbb-rgmii-dwmac"; + reg = <0x0 0xc9410000 0x0 0x10000 + 0x0 0xc8834540 0x0 0x8>; + interrupts = <0 8 1>; + phy-mode= "rgmii"; + pinctrl-names = "eth_pins"; + pinctrl-0 = <ð_pins>; + rst_pin-gpios = <&gpio GPIOZ_14 0>; + mc_val = <0x1621>; + resets = <&clock GCLK_IDX_ETHERNET>; + reset-names = "ethpower"; + interrupt-names = "macirq"; + clocks = <&clock CLK_81>; + clock-names = "ethclk81"; + }; + + mesonstream { + compatible = "amlogic, codec, streambuf"; + dev_name = "mesonstream"; + status = "okay"; + resets = <&clock GCLK_IDX_HIU_PARSER_TOP + &clock GCLK_IDX_VPU_INTR + &clock GCLK_IDX_DEMUX + &clock GCLK_IDX_DOS>; + reset-names = "parser_top", + "vpu_intr", + "demux", + "vdec"; + }; + + amvideocap { + compatible = "amlogic, amvideocap"; + dev_name = "amvideocap.0"; + status = "okay"; + max_size = <8>;//8M + }; + + ion_dev { + compatible = "amlogic, ion_dev"; + memory-region = <&ion_reserved>; + }; + + vdec { + compatible = "amlogic, vdec"; + dev_name = "vdec.0"; + status = "okay"; + interrupts = <0 3 1 + 0 23 1 + 0 32 1 + 0 43 1 + 0 44 1 + 0 45 1>; + interrupt-names = "vsync", + "demux", + "parser", + "mailbox_0", + "mailbox_1", + "mailbox_2"; + }; + picdec { + compatible = "amlogic, picdec"; + memory-region = <&picdec_cma_reserved>; + dev_name = "picdec"; + status = "okay"; + }; + ppmgr { + compatible = "amlogic, ppmgr";//to match of_device_id's compatible member + memory-region = <&ion_reserved>; + dev_name = "ppmgr"; + status = "okay"; + }; + deinterlace { + compatible = "amlogic, deinterlace"; + status = "okay"; + memory-region = <&di_reserved>; + interrupts = <0 46 1 + 0 6 1>; + interrupt-names = "de_irq", + "timerc"; + buffer-size = <3133440>; //1920x1088x3/2 + hw-version = <2>; + }; +/* vdin0 { + compatible = "amlogic, vdin"; + memory-region = <&vdin0_reserved>; + dev_name = "vdin0"; + status = "ok"; + reserve-iomap = "true"; + interrupts = <0 83 1>; + rdma-irq = <2>; + clocks = <&clock CLK_XTAL>, + <&clock CLK_VID_LOCK_CLK>; + clock-names = "xtal", "cts_vid_lock_clk"; + vdin_id = <0>; + }; + vdin1 { + compatible = "amlogic, vdin"; + memory-region = <&vdin1_reserved>; + dev_name = "vdin1"; + status = "ok"; + reserve-iomap = "true"; + interrupts = <0 85 1>; + rdma-irq = <4>; + clocks = <&clock CLK_XTAL>, + <&clock CLK_VID_LOCK_CLK>; + clock-names = "xtal", "cts_vid_lock_clk"; + vdin_id = <1>; + };*/ + + amvdec_656in0 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in0"; + status = "ok"; + reg = <0x0 0xd0048000 0x0 0x7c>; + clocks = <&clock CLK_FPLL_DIV2>, + <&clock CLK_BT656_CLK0>; + clock-names = "fclk_div2", "cts_bt656_clk0"; + bt656_id = <0>; + }; + amvdec_656in1 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in1"; + status = "ok"; + reg = <0x0 0xd0050000 0x0 0x7c>; + clocks = <&clock CLK_FPLL_DIV2>, + <&clock CLK_BT656_CLK1>; + clock-names = "fclk_div2", "cts_bt656_clk1"; + bt656_id = <1>; + }; + + amvenc_avc{ + compatible = "amlogic, amvenc_avc"; + //memory-region = <&amvenc_avc_reserved>; + dev_name = "amvenc_avc"; + status = "okay"; + interrupts = <0 45 1>; + interrupt-names = "mailbox_2"; + }; + + /*vm0 { + compatible = "amlogic, vm"; + memory-region = <&vm0_cma_reserved>; + dev_name = "vm0"; + status = "okay"; + vm_id = <0>; + }; + + vm1 { + compatible = "amlogic, vm"; + memory-region = <&vm1_cma_reserved>; + dev_name = "vm1"; + status = "okay"; + vm_id = <1>; + };*/ + + vpu { + compatible = "amlogic, vpu"; + dev_name = "vpu"; + status = "ok"; + clk_level = <7>; + /** 0: 100.0M 1: 166.7M 2: 200.0M + 3: 250.0M 4: 333.3M 5: 400.0M + 6: 500.0M 7: 666.7M */ + }; + bt-dev{ + compatible = "amlogic, bt-dev"; + dev_name = "bt-dev"; + status = "ok"; + gpio_reset = <&gpio GPIOX_20 GPIO_ACTIVE_HIGH>; + }; + + rtc{ + compatible = "amlogic, aml_vrtc"; + alarm_reg_addr = <0xc81000a8>; + timer_e_addr = <0xc1109988>; + init_date = "2015/01/01"; + status = "okay"; + }; + + wifi{ + compatible = "amlogic, aml_wifi"; + dev_name = "aml_wifi"; + status = "okay"; + interrupt_pin = <&gpio GPIOX_7 GPIO_ACTIVE_HIGH>; + interrupts = < 0 68 4>; + irq_trigger_type = "GPIO_IRQ_LOW"; + power_on_pin = <&gpio GPIOX_6 GPIO_ACTIVE_HIGH>; + dhd_static_buf; + pinctrl-names = "wifi_32k_pins"; + pinctrl-0 = <&wifi_32k_pins>; + }; + sd{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0072000 0x0 0x2000>; + interrupts = < 0 217 1 + 0 67 1 + 0 69 1>; + pinctrl-names = "sd_clk_cmd_pins", "sd_all_pins", "sd_1bit_pins","sd_clk_cmd_uart_pins","sd_1bit_uart_pins", "sd_to_ao_uart_pins", "ao_to_sd_uart_pins","ao_to_sd_jtag_pins","sd_to_ao_jtag_pins"; + pinctrl-0 = <&sd_clk_cmd_pins>; + pinctrl-1 = <&sd_all_pins>; + pinctrl-2 = <&sd_1bit_pins>; + pinctrl-3 = <&sd_clk_cmd_uart_pins>; + pinctrl-4 = <&sd_1bit_uart_pins>; + pinctrl-5 = <&sd_to_ao_uart_pins>; + pinctrl-6 = <&ao_to_sd_uart_pins>; + pinctrl-7 = <&ao_to_sd_jtag_pins>; + pinctrl-8 = <&sd_to_ao_jtag_pins>; + + sd{ + status = "okay"; + port = <1>; /**0:sdio_a, 1:sdio_b, 2:sdio_c, 3:sdhc_a, 4:sdhc_b, 5:sdhc_c */ + pinname = "sd"; + ocr_avail = <0x00200080>; // 3.3:0x200000, 1.8+3.3:0x00200080 + caps = "MMC_CAP_4_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED"; + //"MMC_CAP_UHS_SDR12", + //"MMC_CAP_UHS_SDR25","MMC_CAP_UHS_SDR50", + //"MMC_CAP_UHS_SDR104"; + f_min = <400000>; + f_max = <100000000>; + max_req_size = <0x20000>; /**128KB*/ + gpio_dat3 = <&gpio CARD_4 GPIO_ACTIVE_HIGH>; + jtag_pin = <&gpio CARD_0 GPIO_ACTIVE_HIGH>; + gpio_cd = <&gpio CARD_6 GPIO_ACTIVE_HIGH>; + irq_in = <3>; + irq_out = <5>; + card_type = <5>; /* 0:unknown, 1:mmc card(include eMMC), 2:sd card(include tSD), 3:sdio device(ie:sdio-wifi), 4:SD combo (IO+mem) card, 5:NON sdio device(means sd/mmc card), other:reserved */ + }; + }; + emmc{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0074000 0x0 0x2000>; + interrupts = < 0 218 1>; + pinctrl-names = "emmc_clk_cmd_pins", "emmc_all_pins"; + pinctrl-0 = <&emmc_clk_cmd_pins>; + pinctrl-1 = <&emmc_all_pins>; + emmc{ + status = "okay"; + pinname = "emmc"; + ocr_avail = <0x200080>; /**VDD voltage 3.3 ~ 3.4 */ + caps = "MMC_CAP_8_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE","MMC_CAP_1_8V_DDR", + "MMC_CAP_HW_RESET", "MMC_CAP_ERASE", "MMC_CAP_CMD23"; + caps2 = "MMC_CAP2_HS200"; + f_min = <300000>; + f_max = <200000000>; + tx_phase = <0>; + max_req_size = <0x20000>; /**256KB*/ +// gpio_dat3 = "BOOT_3" + gpio_dat3 = <&gpio BOOT_3 GPIO_ACTIVE_HIGH>; + hw_reset = <&gpio BOOT_9 GPIO_ACTIVE_HIGH>; + card_type = <1>; /* 1:mmc card(include eMMC), 2:sd card(include tSD), */ + }; + }; + sdio{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0070000 0x0 0x2000>; + interrupts = < 0 216 1>; + pinctrl-names = "sdio_clk_cmd_pins", "sdio_all_pins"; + pinctrl-0 = <&sdio_clk_cmd_pins>; + pinctrl-1 = <&sdio_all_pins>; + sdio{ + status = "okay"; + pinname = "sdio"; + ocr_avail = <0x00200080>; /*3.3:0x200000, 1.8+3.3:0x00200080 */ + caps = "MMC_CAP_4_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", + "MMC_CAP_UHS_SDR12","MMC_CAP_UHS_SDR25", + "MMC_CAP_UHS_SDR50","MMC_CAP_UHS_SDR104", + "MMC_PM_KEEP_POWER"; + f_min = <400000>; + f_max = <200000000>; + max_req_size = <0x20000>; /**128KB*/ + card_type = <3>; /*3:sdio device(ie:sdio-wifi), 4:SD combo (IO+mem) card, */ + }; + }; + nand{ + compatible = "amlogic, aml_nand"; + dev_name = "nand"; + status = "ok"; + reg = <0x0 0xd0074800 0x0 0x200>; + interrupts = < 0 34 1 >; + pinctrl-names = "nand_rb_mod","nand_norb_mod", "nand_cs_pins_only"; + pinctrl-0 = <&conf_nand_pulldown &conf_nand_pullup &all_nand_pins>; + pinctrl-1 = <&conf_nand_pulldown &conf_nand_pullup &all_nand_pins>; + pinctrl-2 = <&nand_cs_pins>; + device_id = <0>; + plat-names = "nandnormal"; + plat-num = <1>; + plat-part-0 = <&normal>; + normal: normal{ + enable_pad ="ce0","ce1","ce2","ce3"; + busy_pad = "rb0"; + }; + }; + aml_nftl{ + compatible = "amlogic, nftl"; + /* config nftl here */ + + }; + /*aml_cams{ + compatible = "amlogic, cams_prober"; + status = "okay"; + clocks = <&clock CLK_CAMERA_24M>; + clock-names = "clk_camera_24"; + pinctrl-names = "cam_gpio_a", "cam_gpio_b","cam_all"; + pinctrl-0 = <&cam_gpio_a> ; + pinctrl-1 = <&cam_gpio_b> ; + pinctrl-2 = <&cam_gpio_a &cam_gpio_b> ; + cam_0{ + cam_name = "sp2518"; + front_back = <0>; + i2c_bus = "i2c_bus_a"; + gpio_pwdn-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_HIGH>; + gpio_rst-gpios = <&gpio GPIOZ_12 GPIO_ACTIVE_HIGH>; + mirror_flip = <1>; + vertical_flip = <1>; + spread_spectrum = <0>; //0:none; 1:0.3%; 2:0.6%; 3:1.25%; 4:2.5%; 5:5% + bt_path = "gpio"; + bt_path_count = <2>; + vdin_path = <0>; + status = "okay"; + }; + cam_1{ + cam_name = "sp0838"; + front_back = <1>; + i2c_bus = "i2c_bus_a"; + gpio_pwdn-gpios = <&gpio GPIOZ_13 GPIO_ACTIVE_HIGH>; + gpio_rst-gpios = <&gpio GPIOZ_12 GPIO_ACTIVE_HIGH>; + mirror_flip = <1>; + vertical_flip = <1>; + spread_spectrum = <0>; //0:none; 1:0.3%; 2:0.6%; 3:1.25%; 4:2.5%; 5:5% + bt_path = "gpio_b"; + bt_path_count = <2>; + vdin_path = <1>; + status = "okay"; + }; + };*/ + partitions: partitions{ + parts = <11>; + part-0 = <&logo>; + part-1 = <&recovery>; + part-2 = <&rsv>; + part-3 = <&tee>; + part-4 = <&crypt>; + part-5 = <&misc>; + part-6 = <&instaboot>; + part-7 = <&boot>; + part-8 = <&system>; + part-9 = <&cache>; + part-10 = <&data>; + logo:logo{ + pname = "logo"; + size = <0x0 0x2000000>; + mask = <1>; + }; + recovery:recovery{ + pname = "recovery"; + size = <0x0 0x2000000>; + mask = <1>; + }; + rsv:rsv{ + pname = "rsv"; + size = <0x0 0x800000>; + mask = <1>; + }; + tee:tee{ + pname = "tee"; + size = <0x0 0x800000>; + mask = <1>; + }; + crypt:crypt{ + pname = "crypt"; + size = <0x0 0x2000000>; + mask = <1>; + }; + misc:misc{ + pname = "misc"; + size = <0x0 0x2000000>; + mask = <1>; + }; + instaboot:instaboot{ + pname = "instaboot"; + size = <0x0 0x20000000>; + mask = <1>; + }; + boot:boot + { + pname = "boot"; + size = <0x0 0x2000000>; + mask = <1>; + }; + system:system + { + pname = "system"; + size = <0x0 0x40000000>; + mask = <1>; + }; + cache:cache + { + pname = "cache"; + size = <0x0 0x20000000>; + mask = <2>; + }; + data:data + { + pname = "data"; + size = <0xffffffff 0xffffffff>; + mask = <4>; + }; + }; + unifykey{ + compatible = "amlogic, unifykey"; + status = "ok"; + + unifykey-num = <11>; + unifykey-index-0 = <&keysn_0>; + unifykey-index-1 = <&keysn_1>; + unifykey-index-2 = <&keysn_2>; + unifykey-index-3 = <&keysn_3>; + unifykey-index-4 = <&keysn_4>; + unifykey-index-5 = <&keysn_5>; + unifykey-index-6 = <&keysn_6>; + unifykey-index-7 = <&keysn_7>; + unifykey-index-8 = <&keysn_8>; + unifykey-index-9 = <&keysn_9>; + unifykey-index-10= <&keysn_10>; + + keysn_0: key_0{ + key-name = "usid"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_1:key_1{ + key-name = "mac"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_2:key_2{ + key-name = "hdcp"; + key-device = "secure"; + key-type = "sha1"; + key-permit = "read","write","del"; + }; + keysn_3:key_3{ + key-name = "secure_boot_set"; + key-device = "efuse"; + key-permit = "write"; + }; + keysn_4:key_4{ + key-name = "mac_bt"; + key-device = "normal"; + key-permit = "read","write","del"; + key-type = "mac"; + }; + keysn_5:key_5{ + key-name = "mac_wifi"; + key-device = "normal"; + key-permit = "read","write","del"; + key-type = "mac"; + }; + keysn_6:key_6{ + key-name = "hdcp2_tx"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_7:key_7{ + key-name = "hdcp2_rx"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_8:key_8{ + key-name = "widevinekeybox"; + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_9:key_9{ + key-name = "deviceid"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_10:key_10{ + key-name = "hdcp22_fw_private"; + key-device = "secure"; + key-permit = "read","write","del"; + }; + };//End unifykey + amhdmitx: amhdmitx{ + compatible = "amlogic, amhdmitx"; + dev_name = "amhdmitx"; + status = "okay"; + pinctrl-names="hdmitx_hpd", "hdmitx_ddc"; + pinctrl-0=<&hdmitx_hpd>; + pinctrl-1=<&hdmitx_ddc>; + /* HPD, 57 + 32 = 89; CEC, 151 + 32 = 183*/ + interrupts = <0 57 1>; + interrupt-names = "hdmitx_hpd"; + clocks = <&clock CLK_HDMITX_SYS &clock CLK_HDMITX_ENCP + &clock CLK_HDMITX_ENCI &clock CLK_HDMITX_PIXEL + &clock CLK_HDMITX_PHY &clock CLK_VID>; + clock-names = "hdmitx_clk_sys", "hdmitx_clk_encp", "hdmitx_clk_enci", + "hdmitx_clk_pixel", "hdmitx_clk_phy", "hdmitx_clk_vid"; + /* hdcp14_en = <0x82000010>; */ + /* hdcp14_rslt = <0x82000011>; */ + gpio_i2c_en = <0x1>; + ranges; + #address-cells = <2>; + #size-cells = <2>; + }; + aocec: aocec{ + compatible = "amlogic, amlogic-aocec"; + device_name = "aocec"; + status = "okay"; + vendor_name = "Amlogic"; /* Max Chars: 8 */ + vendor_id = <0x000000>; /* Refer to http://standards.ieee.org/develop/regauth/oui/oui.txt */ + product_desc = "GXBB Mbox"; /* Max Chars: 16 */ + cec_osd_string = "MBox"; /* Max Chars: 14 */ + port_num = <1>; + arc_port_mask = <0x0>; + interrupts = <0 199 1>; + interrupt-names = "hdmi_aocec"; + pinctrl-names = "hdmitx_aocec"; + pinctrl-0=<&hdmitx_aocec>; + reg = <0x0 0xc810023c 0x0 0x4 + 0x0 0xc8100000 0x0 0x200>; + }; + + tvout { + compatible = "amlogic, tvout"; + dev_name = "tvout"; + status = "okay"; + }; + + i2c_gpio: i2c_gpio { + compatible = "i2c-gpio"; + dev_name = "i2c-gpio"; + i2c-gpio,delay-us = <10>; /* 50 kHz */ + gpios = <&gpio GPIOH_1 0 + &gpio GPIOH_2 0>; + #address-cells = <2>; + #size-cells = <2>; + i2c-gpio,timeout-ms = <10>; + i2c_gpio_edid: i2c_gpio_edid { + compatible = "i2c-gpio-edid"; + reg = <0x50 0x0 0x0 0x0>; + }; + }; + + uart_AO: serial@c81004c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004c0 0x0 0x14>; + interrupts = <0 193 1>; + status = "okay"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 64 >; + pinctrl-names = "default"; + //pinctrl-0 = <&ao_uart_pins>; + support-sysrq = <0>; /* 0 not support , 1 support */ + }; + uart_A: serial@c11084c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084c0 0x0 0x14>; + interrupts = <0 26 1>; + status = "okay"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 128 >; + pinctrl-names = "default"; + pinctrl-0 = <&a_uart_pins>; + resets = <&clock GCLK_IDX_UART0>; + }; + + + canvas{ + compatible = "amlogic, meson, canvas"; + dev_name = "amlogic-canvas"; + status = "ok"; + reg = <0x0 0xc8838000 0x0 0x400>; + }; + + rdma{ + compatible = "amlogic, meson, rdma"; + dev_name = "amlogic-rdma"; + status = "ok"; + interrupts = <0 89 1>; + interrupt-names = "rdma"; + }; + + dwc2_b { + compatible = "amlogic,dwc2"; + device_name = "dwc2_b"; + reg = <0x0 0xc9100000 0x0 0x40000>; + interrupts = <0 31 4>; + status = "okay"; + pl-periph-id = <1>; /** lm name */ + clock-src = "usb1"; /** clock src */ + port-id = <1>; /** ref to mach/usb.h */ + port-type = <1>; /** 0: otg, 1: host, 2: slave */ + port-speed = <0>; /** 0: default, 1: high, 2: full */ + port-config = <0>; /** 0: default */ + port-dma = <0>; /** 0: default, 1: single, 2: incr, 3: incr4, 4: incr8, 5: incr16, 6: disable*/ + port-id-mode = <1>; /** 0: hardware, 1: sw_host, 2: sw_slave*/ + phy-reg = <0xc0000020>; + phy-reg-size = <0x20>; + usb-fifo = <1024>; + host-only-core = <1>; + pmu-apply-power = <1>; + cpu-type = "gxbaby"; + resets = <&clock GCLK_IDX_USB_GENERAL + &clock GCLK_IDX_MISC_USB1_TO_DDR + &clock GCLK_IDX_USB1>; + reset-names = "usb_general", + "usb1", + "usb1_to_ddr"; + }; + + dwc2_a { + compatible = "amlogic,dwc2"; + device_name = "dwc2_a"; + reg = <0x0 0xc9000000 0x0 0x40000>; + interrupts = <0 30 4>; + status = "okay"; + pl-periph-id = <0>; /** lm name */ + clock-src = "usb0"; /** clock src */ + port-id = <0>; /** ref to mach/usb.h */ + port-type = <1>; /** 0: otg, 1: host, 2: slave */ + port-speed = <0>; /** 0: default, high, 1: full */ + port-config = <0>; /** 0: default */ + port-dma = <0>; /** 0: default, 1: single, 2: incr, 3: incr4, 4: incr8, 5: incr16, 6: disable*/ + port-id-mode = <0>; /** 0: hardware, 1: sw_host, 2: sw_slave*/ +// gpio-vbus-power = "GPIODV_24"; +// gpios = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>; +// gpio-work-mask = <1>; /**0: work on pulldown,1:work on pullup*/ + phy-reg = <0xc0000000>; + phy-reg-size = <0x20>; + usb-fifo = <1024>; + cpu-type = "gxbaby"; + resets = <&clock GCLK_IDX_USB_GENERAL + &clock GCLK_IDX_MISC_USB0_TO_DDR + &clock GCLK_IDX_USB0>; + reset-names = "usb_general", + "usb0", + "usb0_to_ddr"; + }; + + /* AUDIO MESON8 DEVICES */ + i2s_dai: I2S { + #sound-dai-cells = <0>; + resets = < + &clock GCLK_IDX_AIU_AI_TOP_GLUE + &clock GCLK_IDX_AUD_BUF_ABD + &clock GCLK_IDX_AIU_I2S_OUT + &clock GCLK_IDX_AIU_AMCLK_MEASURE + &clock GCLK_IDX_AIU_AIFIFO2 + &clock GCLK_IDX_AIU_AUD_MIXER + &clock GCLK_IDX_AIU_MIXER_REG + &clock GCLK_IDX_AIU_ADC + &clock GCLK_IDX_AIU_TOP_LEVEL + &clock GCLK_IDX_AIU_AOCLK + &clock GCLK_IDX_AUD_IN + >; + reset-names = + "top_glue", + "aud_buf", + "i2s_out", + "amclk_measure", + "aififo2", + "aud_mixer", + "mixer_reg", + "adc", + "top_level", + "aoclk", + "aud_in"; + clocks = <&clock CLK_MPLL2>, + <&clock CLK_AMCLK>; + clock-names = "mpll2", "mclk"; + compatible = "amlogic, aml-i2s-dai"; + }; + spdif_dai: SPDIF { + #sound-dai-cells = <0>; + compatible = "amlogic, aml-spdif-dai"; + resets = < + &clock GCLK_IDX_AIU_IEC958 + &clock GCLK_IDX_AIU_ICE958_AMCLK + >; + reset-names = + "iec958", + "iec958_amclk"; + clocks = <&clock CLK_MPLL1>, + <&clock CLK_I958>, + <&clock CLK_AMCLK>, + <&clock CLK_SPDIF>, + <&clock CLK_81>; + clock-names = "mpll1", "i958", "mclk", "spdif", "clk_81"; + }; + pcm_dai: PCM { + #sound-dai-cells = <0>; + compatible = "amlogic, aml-pcm-dai"; + pinctrl-names = "aml_audio_btpcm"; + pinctrl-0 = <&audio_btpcm_pins>; + clocks = <&clock CLK_MPLL0>, + <&clock CLK_PCM_MCLK>, + <&clock CLK_PCM_SCLK>; + clock-names = "mpll0", "pcm_mclk", "pcm_sclk"; + pcm_mode = <1>; /* 0=slave mode, 1=master mode */ + }; + i2s_plat: i2s_platform { + compatible = "amlogic, aml-i2s"; + interrupts = <0 29 1>; + }; + pcm_plat: pcm_platform { + compatible = "amlogic, aml-pcm"; + }; + spdif_codec: spdif_codec{ + #sound-dai-cells = <0>; + compatible = "amlogic, aml-spdif-codec"; + pinctrl-names = "aml_audio_spdif"; + pinctrl-0 = <&audio_spdif_pins>; + }; + pcm_codec: pcm_codec{ + #sound-dai-cells = <0>; + compatible = "amlogic, pcm2BT-codec"; + }; + /* endof AUDIO MESON8 DEVICES */ + + /* AUDIO board specific */ + dummy_codec:dummy{ + #sound-dai-cells = <0>; + compatible = "amlogic, aml_dummy_codec"; + status = "okay"; + }; + aml_m8_snd { + compatible = "aml, aml_snd_m8"; + status = "okay"; + aml-sound-card,format = "i2s"; + aml_sound_card,name = "AML-M8AUDIO"; + aml,audio-routing = + "Ext Spk","LOUTL", + "Ext Spk","LOUTR"; + + mute_gpio-gpios = <&gpio GPIOH_3 0>; + hp_disable; + hp_paraments = <800 300 0 5 1>; + pinctrl-names = "aml_snd_m8"; + pinctrl-0 = <&audio_pins>; + cpu_list = <&cpudai0 &cpudai1 &cpudai2>; + codec_list = <&codec0 &codec1 &codec2>; + plat_list = <&i2s_plat &i2s_plat &pcm_plat>; + cpudai0: cpudai0 { + sound-dai = <&i2s_dai>; + }; + cpudai1: cpudai1 { + sound-dai = <&spdif_dai>; + }; + cpudai2: cpudai2 { + sound-dai = <&pcm_dai>; + }; + codec0: codec0 { + sound-dai = <&dummy_codec>; + }; + codec1: codec1 { + sound-dai = <&spdif_codec>; + }; + codec2: codec2 { + sound-dai = <&pcm_codec>; + }; + }; + /* END OF AUDIO board specific */ + + gpio_keypad{ + compatible = "amlogic, gpio_keypad"; + status = "okay"; + scan_period = <20>; + key_num = <1>; + key_name = "power"; + key_code = <116>; + key_pin = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>; /*"GPIOAO_3";*/ + irq_keyup = <6>; + irq_keydown = <7>; + }; + + adc_keypad{ + compatible = "amlogic, adc_keypad"; + status = "okay"; + key_name = "menu", "vol-","vol+", "esc", "home"; + key_num = <5>; + key_code = <139 114 115 1 102>; + key_chan = <0 0 0 0 0>; + key_val = <0 143 271 393 510>; //voltage=0/252/478/692/824mV, val=voltage/1800mV*1023 + key_tolerance = <40 40 40 40 40>; + }; + + sysled { + compatible = "amlogic, sysled"; + dev_name = "sysled"; + status = "okay"; + led_gpio = <&gpio_ao GPIOAO_13 GPIO_ACTIVE_HIGH>; + led_active_low = <1>; + }; + aml_sensor0: aml-sensor@0 { + compatible = "amlogic, aml-thermal"; + device_name = "thermal"; + #thermal-sensor-cells = <1>; + cooling_devices { + cpufreq_cool_cluster0 { + min_state = <1000000>; + dyn_coeff = <140>; + cluster_id = <0>; + node_name = "cpus"; + device_type = "cpufreq"; + }; + cpucore_cool_cluster0 { + min_state = <1>; + dyn_coeff = <0>; + cluster_id = <0>; + node_name = "cpu_core_cluster0"; + device_type = "cpucore"; + }; + gpufreq_cool { + min_state = <400>; + dyn_coeff = <437>; + cluster_id = <0>; + node_name = "mali"; + device_type = "gpufreq"; + }; + gpucore_cool { + min_state = <1>; + dyn_coeff = <0>; + cluster_id = <0>; + node_name = "thermal_gpu_cores"; + device_type = "gpucore"; + }; + }; + cpu_cluster0:cpu_core_cluster0 { + #cooling-cells = <2>; /* min followed by max */ + }; + gpucore:thermal_gpu_cores { + #cooling-cells = <2>; /* min followed by max */ + }; + }; + thermal-zones { + soc_thermal { + polling-delay = <1000>; + polling-delay-passive = <100>; + sustainable-power = <2150>; + + thermal-sensors = <&aml_sensor0 3>; + + trips { + switch_on: trip-point@0 { + temperature = <70000>; + hysteresis = <1000>; + type = "passive"; + }; + control: trip-point@1 { + temperature = <80000>; + hysteresis = <1000>; + type = "passive"; + }; + hot: trip-point@2 { + temperature = <85000>; + hysteresis = <5000>; + type = "hot"; + }; + critical: trip-point@3 { + temperature = <260000>; + hysteresis = <1000>; + type = "critical"; + }; + }; + + cooling-maps { + cpufreq_cooling_map { + trip = <&control>; + cooling-device = <&cpus 0 4>; + contribution = <1024>; + }; + cpucore_cooling_map { + trip = <&control>; + cooling-device = <&cpu_cluster0 0 3>; + contribution = <1024>; + }; + gpufreq_cooling_map { + trip = <&control>; + cooling-device = <&gpu 0 4>; + contribution = <1024>; + }; + gpucore_cooling_map { + trip = <&control>; + cooling-device = <&gpucore 0 2>; + contribution = <1024>; + }; + }; + }; + }; + + dvb { + compatible = "amlogic,dvb"; + dev_name = "wetek-dvb"; + status = "okay"; + fec_reset_gpio-gpios = <&gpio GPIOY_13 GPIO_ACTIVE_HIGH>; + power_ctrl_gpio-gpios = <&gpio GPIOY_15 GPIO_ACTIVE_LOW>; + //"parallel","serial","disable" + ts0 = "parallel"; + ts0_control = <0>; + ts0_invert = <0>; + pinctrl-names = "p_ts0", "s_ts0"; + pinctrl-0 = <&dvb_p_ts0_pins>; + pinctrl-1 = <&dvb_s_ts0_pins>; + resets = <&clock GCLK_IDX_DEMUX + &clock GCLK_IDX_ASYNC_FIFO + &clock GCLK_IDX_AHB_ARB0 + &clock GCLK_IDX_HIU_PARSER_TOP>; + reset-names = "demux", "asyncfifo", "ahbarb0", "uparsertop"; + }; +/* dvbfe { + compatible = "amlogic, dvbfe"; + dev_name = "dvbfe"; + dtv_demod0 = "Mxl241"; + dtv_demod0_i2c_adap_id = <2>; + dtv_demod0_i2c_addr = <0x60>; + dtv_demod0_reset_value = <0>; + dtv_demod0_reset_gpio-gpios = <&gpio GPIOY_12 GPIO_ACTIVE_HIGH>; + fe0_dtv_demod = <0>; + fe0_ts = <0>; + fe0_dev = <0>; + };*/ +}; +&i2c_a { + status = "okay"; + /*p200: multiplex with usb PWR, disbaled*/ +}; +/* +&i2c_b { + status = "okay"; +}; +*/ + +&pinmux { + audio_pins:audio_pin{ + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins = "GPIOAO_8","GPIOAO_9","GPIOAO_10","GPIOAO_11"; + }; + + audio_spdif_pins:audio_pin1{ + amlogic,setmask=<1 0x200>; /*spdif_out*/ + amlogic,clrmask=<1 0x10000>; /*spdif_out*/ + amlogic,pins ="GPIOY_12"; /*spdif_out*/ + }; + + audio_btpcm_pins:audio_btpcm_pins{ + /* BT PCM PINMUX SETTING*/ + amlogic,setmask=<3 0x78000000>; + amlogic,clrmask=<3 0x803280 + 4 0xc0>; + amlogic,pins ="GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11"; + }; +}; + +&efuse { + status = "okay"; +}; +&audio_data{ + status = "okay"; +}; +&defendkey { + status = "okay"; +}; +&aml_remote { + status = "okay"; +}; diff --git a/arch/arm64/boot/dts/amlogic/mesongxbb-gpu-mali450.dtsi b/arch/arm64/boot/dts/amlogic/mesongxbb-gpu-mali450.dtsi index f4307e9ae14d5..095823dfc85cd 100644 --- a/arch/arm64/boot/dts/amlogic/mesongxbb-gpu-mali450.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesongxbb-gpu-mali450.dtsi @@ -26,7 +26,7 @@ pmu_domain_config = <0x1 0x2 0x4 0x4 0x0 0x0 0x0 0x0 0x0 0x1 0x2 0x0>; pmu_switch_delay = <0xffff> ; num_of_pp = <3> ; - def_clock = <3> ; + def_clk = <3>; sc_mpp = <3>;/* number of pp used most of time.*/ tbl = <&clk125_cfg &clk285_cfg &clk400_cfg &clk500_cfg &clk666_cfg &clk800_cfg>; diff --git a/arch/arm64/boot/dts/amlogic/mesongxbb.dtsi b/arch/arm64/boot/dts/amlogic/mesongxbb.dtsi index 5b56f99029dca..fe7742c270501 100644 --- a/arch/arm64/boot/dts/amlogic/mesongxbb.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesongxbb.dtsi @@ -594,7 +594,7 @@ }; }; - meson-remote { + aml_remote:meson-remote { compatible = "amlogic, aml_remote"; dev_name = "meson-remote"; status = "ok"; @@ -603,6 +603,14 @@ pinctrl-names = "default"; pinctrl-0 = <&remote_pins>; }; + meson_ir:meson-ir { + compatible = "amlogic,meson-gxbb-ir"; + status = "disabled"; + reg = <0x0 0xc8100580 0x0 0x40>; + interrupts = <0 196 1>; + pinctrl-names = "default"; + pinctrl-0 = <&remote_pins>; + }; rng { compatible = "amlogic,meson-rng"; diff --git a/arch/arm64/boot/dts/apm-mustang.dts b/arch/arm64/boot/dts/apm-mustang.dts deleted file mode 100644 index 6541962f5d703..0000000000000 --- a/arch/arm64/boot/dts/apm-mustang.dts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * dts file for AppliedMicro (APM) Mustang Board - * - * Copyright (C) 2013, Applied Micro Circuits Corporation - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - */ - -/dts-v1/; - -/include/ "apm-storm.dtsi" - -/ { - model = "APM X-Gene Mustang board"; - compatible = "apm,mustang", "apm,xgene-storm"; - - chosen { }; - - memory { - device_type = "memory"; - reg = < 0x1 0x00000000 0x0 0x80000000 >; /* Updated by bootloader */ - }; -}; - -&serial0 { - status = "ok"; -}; diff --git a/arch/arm64/boot/dts/apm-storm.dtsi b/arch/arm64/boot/dts/apm-storm.dtsi deleted file mode 100644 index 03431d25123bc..0000000000000 --- a/arch/arm64/boot/dts/apm-storm.dtsi +++ /dev/null @@ -1,349 +0,0 @@ -/* - * dts file for AppliedMicro (APM) X-Gene Storm SOC - * - * Copyright (C) 2013, Applied Micro Circuits Corporation - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - */ - -/ { - compatible = "apm,xgene-storm"; - interrupt-parent = <&gic>; - #address-cells = <2>; - #size-cells = <2>; - - cpus { - #address-cells = <2>; - #size-cells = <0>; - - cpu@000 { - device_type = "cpu"; - compatible = "apm,potenza", "arm,armv8"; - reg = <0x0 0x000>; - enable-method = "spin-table"; - cpu-release-addr = <0x1 0x0000fff8>; - }; - cpu@001 { - device_type = "cpu"; - compatible = "apm,potenza", "arm,armv8"; - reg = <0x0 0x001>; - enable-method = "spin-table"; - cpu-release-addr = <0x1 0x0000fff8>; - }; - cpu@100 { - device_type = "cpu"; - compatible = "apm,potenza", "arm,armv8"; - reg = <0x0 0x100>; - enable-method = "spin-table"; - cpu-release-addr = <0x1 0x0000fff8>; - }; - cpu@101 { - device_type = "cpu"; - compatible = "apm,potenza", "arm,armv8"; - reg = <0x0 0x101>; - enable-method = "spin-table"; - cpu-release-addr = <0x1 0x0000fff8>; - }; - cpu@200 { - device_type = "cpu"; - compatible = "apm,potenza", "arm,armv8"; - reg = <0x0 0x200>; - enable-method = "spin-table"; - cpu-release-addr = <0x1 0x0000fff8>; - }; - cpu@201 { - device_type = "cpu"; - compatible = "apm,potenza", "arm,armv8"; - reg = <0x0 0x201>; - enable-method = "spin-table"; - cpu-release-addr = <0x1 0x0000fff8>; - }; - cpu@300 { - device_type = "cpu"; - compatible = "apm,potenza", "arm,armv8"; - reg = <0x0 0x300>; - enable-method = "spin-table"; - cpu-release-addr = <0x1 0x0000fff8>; - }; - cpu@301 { - device_type = "cpu"; - compatible = "apm,potenza", "arm,armv8"; - reg = <0x0 0x301>; - enable-method = "spin-table"; - cpu-release-addr = <0x1 0x0000fff8>; - }; - }; - - gic: interrupt-controller@78010000 { - compatible = "arm,cortex-a15-gic"; - #interrupt-cells = <3>; - interrupt-controller; - reg = <0x0 0x78010000 0x0 0x1000>, /* GIC Dist */ - <0x0 0x78020000 0x0 0x1000>, /* GIC CPU */ - <0x0 0x78040000 0x0 0x2000>, /* GIC VCPU Control */ - <0x0 0x78060000 0x0 0x2000>; /* GIC VCPU */ - interrupts = <1 9 0xf04>; /* GIC Maintenence IRQ */ - }; - - timer { - compatible = "arm,armv8-timer"; - interrupts = <1 0 0xff01>, /* Secure Phys IRQ */ - <1 13 0xff01>, /* Non-secure Phys IRQ */ - <1 14 0xff01>, /* Virt IRQ */ - <1 15 0xff01>; /* Hyp IRQ */ - clock-frequency = <50000000>; - }; - - soc { - compatible = "simple-bus"; - #address-cells = <2>; - #size-cells = <2>; - ranges; - - clocks { - #address-cells = <2>; - #size-cells = <2>; - ranges; - refclk: refclk { - compatible = "fixed-clock"; - #clock-cells = <1>; - clock-frequency = <100000000>; - clock-output-names = "refclk"; - }; - - pcppll: pcppll@17000100 { - compatible = "apm,xgene-pcppll-clock"; - #clock-cells = <1>; - clocks = <&refclk 0>; - clock-names = "pcppll"; - reg = <0x0 0x17000100 0x0 0x1000>; - clock-output-names = "pcppll"; - type = <0>; - }; - - socpll: socpll@17000120 { - compatible = "apm,xgene-socpll-clock"; - #clock-cells = <1>; - clocks = <&refclk 0>; - clock-names = "socpll"; - reg = <0x0 0x17000120 0x0 0x1000>; - clock-output-names = "socpll"; - type = <1>; - }; - - socplldiv2: socplldiv2 { - compatible = "fixed-factor-clock"; - #clock-cells = <1>; - clocks = <&socpll 0>; - clock-names = "socplldiv2"; - clock-mult = <1>; - clock-div = <2>; - clock-output-names = "socplldiv2"; - }; - - qmlclk: qmlclk { - compatible = "apm,xgene-device-clock"; - #clock-cells = <1>; - clocks = <&socplldiv2 0>; - clock-names = "qmlclk"; - reg = <0x0 0x1703C000 0x0 0x1000>; - reg-names = "csr-reg"; - clock-output-names = "qmlclk"; - }; - - ethclk: ethclk { - compatible = "apm,xgene-device-clock"; - #clock-cells = <1>; - clocks = <&socplldiv2 0>; - clock-names = "ethclk"; - reg = <0x0 0x17000000 0x0 0x1000>; - reg-names = "div-reg"; - divider-offset = <0x238>; - divider-width = <0x9>; - divider-shift = <0x0>; - clock-output-names = "ethclk"; - }; - - eth8clk: eth8clk { - compatible = "apm,xgene-device-clock"; - #clock-cells = <1>; - clocks = <ðclk 0>; - clock-names = "eth8clk"; - reg = <0x0 0x1702C000 0x0 0x1000>; - reg-names = "csr-reg"; - clock-output-names = "eth8clk"; - }; - - sataphy1clk: sataphy1clk@1f21c000 { - compatible = "apm,xgene-device-clock"; - #clock-cells = <1>; - clocks = <&socplldiv2 0>; - reg = <0x0 0x1f21c000 0x0 0x1000>; - reg-names = "csr-reg"; - clock-output-names = "sataphy1clk"; - status = "disabled"; - csr-offset = <0x4>; - csr-mask = <0x00>; - enable-offset = <0x0>; - enable-mask = <0x06>; - }; - - sataphy2clk: sataphy1clk@1f22c000 { - compatible = "apm,xgene-device-clock"; - #clock-cells = <1>; - clocks = <&socplldiv2 0>; - reg = <0x0 0x1f22c000 0x0 0x1000>; - reg-names = "csr-reg"; - clock-output-names = "sataphy2clk"; - status = "ok"; - csr-offset = <0x4>; - csr-mask = <0x3a>; - enable-offset = <0x0>; - enable-mask = <0x06>; - }; - - sataphy3clk: sataphy1clk@1f23c000 { - compatible = "apm,xgene-device-clock"; - #clock-cells = <1>; - clocks = <&socplldiv2 0>; - reg = <0x0 0x1f23c000 0x0 0x1000>; - reg-names = "csr-reg"; - clock-output-names = "sataphy3clk"; - status = "ok"; - csr-offset = <0x4>; - csr-mask = <0x3a>; - enable-offset = <0x0>; - enable-mask = <0x06>; - }; - - sata01clk: sata01clk@1f21c000 { - compatible = "apm,xgene-device-clock"; - #clock-cells = <1>; - clocks = <&socplldiv2 0>; - reg = <0x0 0x1f21c000 0x0 0x1000>; - reg-names = "csr-reg"; - clock-output-names = "sata01clk"; - csr-offset = <0x4>; - csr-mask = <0x05>; - enable-offset = <0x0>; - enable-mask = <0x39>; - }; - - sata23clk: sata23clk@1f22c000 { - compatible = "apm,xgene-device-clock"; - #clock-cells = <1>; - clocks = <&socplldiv2 0>; - reg = <0x0 0x1f22c000 0x0 0x1000>; - reg-names = "csr-reg"; - clock-output-names = "sata23clk"; - csr-offset = <0x4>; - csr-mask = <0x05>; - enable-offset = <0x0>; - enable-mask = <0x39>; - }; - - sata45clk: sata45clk@1f23c000 { - compatible = "apm,xgene-device-clock"; - #clock-cells = <1>; - clocks = <&socplldiv2 0>; - reg = <0x0 0x1f23c000 0x0 0x1000>; - reg-names = "csr-reg"; - clock-output-names = "sata45clk"; - csr-offset = <0x4>; - csr-mask = <0x05>; - enable-offset = <0x0>; - enable-mask = <0x39>; - }; - - rtcclk: rtcclk@17000000 { - compatible = "apm,xgene-device-clock"; - #clock-cells = <1>; - clocks = <&socplldiv2 0>; - reg = <0x0 0x17000000 0x0 0x2000>; - reg-names = "csr-reg"; - csr-offset = <0xc>; - csr-mask = <0x2>; - enable-offset = <0x10>; - enable-mask = <0x2>; - clock-output-names = "rtcclk"; - }; - }; - - serial0: serial@1c020000 { - status = "disabled"; - device_type = "serial"; - compatible = "ns16550a"; - reg = <0 0x1c020000 0x0 0x1000>; - reg-shift = <2>; - clock-frequency = <10000000>; /* Updated by bootloader */ - interrupt-parent = <&gic>; - interrupts = <0x0 0x4c 0x4>; - }; - - serial1: serial@1c021000 { - status = "disabled"; - device_type = "serial"; - compatible = "ns16550a"; - reg = <0 0x1c021000 0x0 0x1000>; - reg-shift = <2>; - clock-frequency = <10000000>; /* Updated by bootloader */ - interrupt-parent = <&gic>; - interrupts = <0x0 0x4d 0x4>; - }; - - serial2: serial@1c022000 { - status = "disabled"; - device_type = "serial"; - compatible = "ns16550a"; - reg = <0 0x1c022000 0x0 0x1000>; - reg-shift = <2>; - clock-frequency = <10000000>; /* Updated by bootloader */ - interrupt-parent = <&gic>; - interrupts = <0x0 0x4e 0x4>; - }; - - serial3: serial@1c023000 { - status = "disabled"; - device_type = "serial"; - compatible = "ns16550a"; - reg = <0 0x1c023000 0x0 0x1000>; - reg-shift = <2>; - clock-frequency = <10000000>; /* Updated by bootloader */ - interrupt-parent = <&gic>; - interrupts = <0x0 0x4f 0x4>; - }; - - phy1: phy@1f21a000 { - compatible = "apm,xgene-phy"; - reg = <0x0 0x1f21a000 0x0 0x100>; - #phy-cells = <1>; - clocks = <&sataphy1clk 0>; - status = "disabled"; - apm,tx-boost-gain = <30 30 30 30 30 30>; - apm,tx-eye-tuning = <2 10 10 2 10 10>; - }; - - phy2: phy@1f22a000 { - compatible = "apm,xgene-phy"; - reg = <0x0 0x1f22a000 0x0 0x100>; - #phy-cells = <1>; - clocks = <&sataphy2clk 0>; - status = "ok"; - apm,tx-boost-gain = <30 30 30 30 30 30>; - apm,tx-eye-tuning = <1 10 10 2 10 10>; - }; - - phy3: phy@1f23a000 { - compatible = "apm,xgene-phy"; - reg = <0x0 0x1f23a000 0x0 0x100>; - #phy-cells = <1>; - clocks = <&sataphy3clk 0>; - status = "ok"; - apm,tx-boost-gain = <31 31 31 31 31 31>; - apm,tx-eye-tuning = <2 10 10 2 10 10>; - }; - }; -}; diff --git a/arch/arm64/boot/dts/clcd-panels.dtsi b/arch/arm64/boot/dts/clcd-panels.dtsi deleted file mode 100644 index 0b0ff6ead4b21..0000000000000 --- a/arch/arm64/boot/dts/clcd-panels.dtsi +++ /dev/null @@ -1,52 +0,0 @@ -/* - * ARM Ltd. Versatile Express - * - */ - -/ { - panels { - panel@0 { - compatible = "panel"; - mode = "VGA"; - refresh = <60>; - xres = <640>; - yres = <480>; - pixclock = <39721>; - left_margin = <40>; - right_margin = <24>; - upper_margin = <32>; - lower_margin = <11>; - hsync_len = <96>; - vsync_len = <2>; - sync = <0>; - vmode = "FB_VMODE_NONINTERLACED"; - - tim2 = "TIM2_BCD", "TIM2_IPC"; - cntl = "CNTL_LCDTFT", "CNTL_BGR", "CNTL_LCDVCOMP(1)"; - caps = "CLCD_CAP_5551", "CLCD_CAP_565", "CLCD_CAP_888"; - bpp = <16>; - }; - - panel@1 { - compatible = "panel"; - mode = "XVGA"; - refresh = <60>; - xres = <1024>; - yres = <768>; - pixclock = <15748>; - left_margin = <152>; - right_margin = <48>; - upper_margin = <23>; - lower_margin = <3>; - hsync_len = <104>; - vsync_len = <4>; - sync = <0>; - vmode = "FB_VMODE_NONINTERLACED"; - - tim2 = "TIM2_BCD", "TIM2_IPC"; - cntl = "CNTL_LCDTFT", "CNTL_BGR", "CNTL_LCDVCOMP(1)"; - caps = "CLCD_CAP_5551", "CLCD_CAP_565", "CLCD_CAP_888"; - bpp = <16>; - }; - }; -}; diff --git a/arch/arm64/boot/dts/foundation-v8.dts b/arch/arm64/boot/dts/foundation-v8.dts deleted file mode 100644 index 4a060906809d5..0000000000000 --- a/arch/arm64/boot/dts/foundation-v8.dts +++ /dev/null @@ -1,232 +0,0 @@ -/* - * ARM Ltd. - * - * ARMv8 Foundation model DTS - */ - -/dts-v1/; - -/memreserve/ 0x80000000 0x00010000; - -/ { - model = "Foundation-v8A"; - compatible = "arm,foundation-aarch64", "arm,vexpress"; - interrupt-parent = <&gic>; - #address-cells = <2>; - #size-cells = <2>; - - chosen { }; - - aliases { - serial0 = &v2m_serial0; - serial1 = &v2m_serial1; - serial2 = &v2m_serial2; - serial3 = &v2m_serial3; - }; - - cpus { - #address-cells = <2>; - #size-cells = <0>; - - cpu@0 { - device_type = "cpu"; - compatible = "arm,armv8"; - reg = <0x0 0x0>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x8000fff8>; - }; - cpu@1 { - device_type = "cpu"; - compatible = "arm,armv8"; - reg = <0x0 0x1>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x8000fff8>; - }; - cpu@2 { - device_type = "cpu"; - compatible = "arm,armv8"; - reg = <0x0 0x2>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x8000fff8>; - }; - cpu@3 { - device_type = "cpu"; - compatible = "arm,armv8"; - reg = <0x0 0x3>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x8000fff8>; - }; - }; - - memory@80000000 { - device_type = "memory"; - reg = <0x00000000 0x80000000 0 0x80000000>, - <0x00000008 0x80000000 0 0x80000000>; - }; - - gic: interrupt-controller@2c001000 { - compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; - #interrupt-cells = <3>; - #address-cells = <0>; - interrupt-controller; - reg = <0x0 0x2c001000 0 0x1000>, - <0x0 0x2c002000 0 0x1000>, - <0x0 0x2c004000 0 0x2000>, - <0x0 0x2c006000 0 0x2000>; - interrupts = <1 9 0xf04>; - }; - - timer { - compatible = "arm,armv8-timer"; - interrupts = <1 13 0xff01>, - <1 14 0xff01>, - <1 11 0xff01>, - <1 10 0xff01>; - clock-frequency = <100000000>; - }; - - pmu { - compatible = "arm,armv8-pmuv3"; - interrupts = <0 60 4>, - <0 61 4>, - <0 62 4>, - <0 63 4>; - }; - - smb { - compatible = "arm,vexpress,v2m-p1", "simple-bus"; - arm,v2m-memory-map = "rs1"; - #address-cells = <2>; /* SMB chipselect number and offset */ - #size-cells = <1>; - - ranges = <0 0 0 0x08000000 0x04000000>, - <1 0 0 0x14000000 0x04000000>, - <2 0 0 0x18000000 0x04000000>, - <3 0 0 0x1c000000 0x04000000>, - <4 0 0 0x0c000000 0x04000000>, - <5 0 0 0x10000000 0x04000000>; - - #interrupt-cells = <1>; - interrupt-map-mask = <0 0 63>; - interrupt-map = <0 0 0 &gic 0 0 4>, - <0 0 1 &gic 0 1 4>, - <0 0 2 &gic 0 2 4>, - <0 0 3 &gic 0 3 4>, - <0 0 4 &gic 0 4 4>, - <0 0 5 &gic 0 5 4>, - <0 0 6 &gic 0 6 4>, - <0 0 7 &gic 0 7 4>, - <0 0 8 &gic 0 8 4>, - <0 0 9 &gic 0 9 4>, - <0 0 10 &gic 0 10 4>, - <0 0 11 &gic 0 11 4>, - <0 0 12 &gic 0 12 4>, - <0 0 13 &gic 0 13 4>, - <0 0 14 &gic 0 14 4>, - <0 0 15 &gic 0 15 4>, - <0 0 16 &gic 0 16 4>, - <0 0 17 &gic 0 17 4>, - <0 0 18 &gic 0 18 4>, - <0 0 19 &gic 0 19 4>, - <0 0 20 &gic 0 20 4>, - <0 0 21 &gic 0 21 4>, - <0 0 22 &gic 0 22 4>, - <0 0 23 &gic 0 23 4>, - <0 0 24 &gic 0 24 4>, - <0 0 25 &gic 0 25 4>, - <0 0 26 &gic 0 26 4>, - <0 0 27 &gic 0 27 4>, - <0 0 28 &gic 0 28 4>, - <0 0 29 &gic 0 29 4>, - <0 0 30 &gic 0 30 4>, - <0 0 31 &gic 0 31 4>, - <0 0 32 &gic 0 32 4>, - <0 0 33 &gic 0 33 4>, - <0 0 34 &gic 0 34 4>, - <0 0 35 &gic 0 35 4>, - <0 0 36 &gic 0 36 4>, - <0 0 37 &gic 0 37 4>, - <0 0 38 &gic 0 38 4>, - <0 0 39 &gic 0 39 4>, - <0 0 40 &gic 0 40 4>, - <0 0 41 &gic 0 41 4>, - <0 0 42 &gic 0 42 4>; - - ethernet@2,02000000 { - compatible = "smsc,lan91c111"; - reg = <2 0x02000000 0x10000>; - interrupts = <15>; - }; - - v2m_clk24mhz: clk24mhz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <24000000>; - clock-output-names = "v2m:clk24mhz"; - }; - - v2m_refclk1mhz: refclk1mhz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <1000000>; - clock-output-names = "v2m:refclk1mhz"; - }; - - v2m_refclk32khz: refclk32khz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <32768>; - clock-output-names = "v2m:refclk32khz"; - }; - - iofpga@3,00000000 { - compatible = "arm,amba-bus", "simple-bus"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 3 0 0x200000>; - - v2m_sysreg: sysreg@010000 { - compatible = "arm,vexpress-sysreg"; - reg = <0x010000 0x1000>; - }; - - v2m_serial0: uart@090000 { - compatible = "arm,pl011", "arm,primecell"; - reg = <0x090000 0x1000>; - interrupts = <5>; - clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; - clock-names = "uartclk", "apb_pclk"; - }; - - v2m_serial1: uart@0a0000 { - compatible = "arm,pl011", "arm,primecell"; - reg = <0x0a0000 0x1000>; - interrupts = <6>; - clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; - clock-names = "uartclk", "apb_pclk"; - }; - - v2m_serial2: uart@0b0000 { - compatible = "arm,pl011", "arm,primecell"; - reg = <0x0b0000 0x1000>; - interrupts = <7>; - clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; - clock-names = "uartclk", "apb_pclk"; - }; - - v2m_serial3: uart@0c0000 { - compatible = "arm,pl011", "arm,primecell"; - reg = <0x0c0000 0x1000>; - interrupts = <8>; - clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; - clock-names = "uartclk", "apb_pclk"; - }; - - virtio_block@0130000 { - compatible = "virtio,mmio"; - reg = <0x130000 0x200>; - interrupts = <42>; - }; - }; - }; -}; diff --git a/arch/arm64/boot/dts/fvp-base-gicv2-psci.dts b/arch/arm64/boot/dts/fvp-base-gicv2-psci.dts deleted file mode 100644 index a46be6148b3a0..0000000000000 --- a/arch/arm64/boot/dts/fvp-base-gicv2-psci.dts +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright (c) 2013, ARM Limited. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * Neither the name of ARM nor the names of its contributors may be used - * to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/dts-v1/; - -/memreserve/ 0x80000000 0x00010000; - -/ { -}; - -/ { - model = "FVP Base"; - compatible = "arm,vfp-base", "arm,vexpress"; - interrupt-parent = <&gic>; - #address-cells = <2>; - #size-cells = <2>; - - chosen { }; - - aliases { - serial0 = &v2m_serial0; - serial1 = &v2m_serial1; - serial2 = &v2m_serial2; - serial3 = &v2m_serial3; - }; - - psci { - compatible = "arm,psci"; - method = "smc"; - cpu_suspend = <0xc4000001>; - cpu_off = <0x84000002>; - cpu_on = <0xc4000003>; - }; - - cpus { - #address-cells = <2>; - #size-cells = <0>; - - big0: cpu@0 { - device_type = "cpu"; - compatible = "arm,cortex-a57", "arm,armv8"; - reg = <0x0 0x0>; - enable-method = "psci"; - clock-frequency = <1000000>; - }; - big1: cpu@1 { - device_type = "cpu"; - compatible = "arm,cortex-a57", "arm,armv8"; - reg = <0x0 0x1>; - enable-method = "psci"; - clock-frequency = <1000000>; - }; - big2: cpu@2 { - device_type = "cpu"; - compatible = "arm,cortex-a57", "arm,armv8"; - reg = <0x0 0x2>; - enable-method = "psci"; - clock-frequency = <1000000>; - }; - big3: cpu@3 { - device_type = "cpu"; - compatible = "arm,cortex-a57", "arm,armv8"; - reg = <0x0 0x3>; - enable-method = "psci"; - clock-frequency = <1000000>; - }; - little0: cpu@100 { - device_type = "cpu"; - compatible = "arm,cortex-a53", "arm,armv8"; - reg = <0x0 0x100>; - enable-method = "psci"; - clock-frequency = <1000000>; - }; - little1: cpu@101 { - device_type = "cpu"; - compatible = "arm,cortex-a53", "arm,armv8"; - reg = <0x0 0x101>; - enable-method = "psci"; - clock-frequency = <1000000>; - }; - little2: cpu@102 { - device_type = "cpu"; - compatible = "arm,cortex-a53", "arm,armv8"; - reg = <0x0 0x102>; - enable-method = "psci"; - clock-frequency = <1000000>; - }; - little3: cpu@103 { - device_type = "cpu"; - compatible = "arm,cortex-a53", "arm,armv8"; - reg = <0x0 0x103>; - enable-method = "psci"; - clock-frequency = <1000000>; - }; - - cpu-map { - cluster0 { - core0 { - cpu = <&big0>; - }; - core1 { - cpu = <&big1>; - }; - core2 { - cpu = <&big2>; - }; - core3 { - cpu = <&big3>; - }; - }; - cluster1 { - core0 { - cpu = <&little0>; - }; - core1 { - cpu = <&little1>; - }; - core2 { - cpu = <&little2>; - }; - core3 { - cpu = <&little3>; - }; - }; - }; - }; - - memory@80000000 { - device_type = "memory"; - reg = <0x00000000 0x80000000 0 0x80000000>, - <0x00000008 0x80000000 0 0x80000000>; - }; - - gic: interrupt-controller@2f000000 { - compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; - #interrupt-cells = <3>; - #address-cells = <0>; - interrupt-controller; - reg = <0x0 0x2f000000 0 0x10000>, - <0x0 0x2c000000 0 0x2000>, - <0x0 0x2c010000 0 0x2000>, - <0x0 0x2c02F000 0 0x2000>; - interrupts = <1 9 0xf04>; - }; - - timer { - compatible = "arm,armv8-timer"; - interrupts = <1 13 0xff01>, - <1 14 0xff01>, - <1 11 0xff01>, - <1 10 0xff01>; - clock-frequency = <100000000>; - }; - - timer@2a810000 { - compatible = "arm,armv7-timer-mem"; - reg = <0x0 0x2a810000 0x0 0x10000>; - clock-frequency = <100000000>; - #address-cells = <2>; - #size-cells = <2>; - ranges; - frame@2a820000 { - frame-number = <0>; - interrupts = <0 25 4>; - reg = <0x0 0x2a820000 0x0 0x10000>; - }; - }; - - pmu { - compatible = "arm,armv8-pmuv3"; - interrupts = <0 60 4>, - <0 61 4>, - <0 62 4>, - <0 63 4>; - }; - - smb { - compatible = "simple-bus"; - - #address-cells = <2>; - #size-cells = <1>; - ranges = <0 0 0 0x08000000 0x04000000>, - <1 0 0 0x14000000 0x04000000>, - <2 0 0 0x18000000 0x04000000>, - <3 0 0 0x1c000000 0x04000000>, - <4 0 0 0x0c000000 0x04000000>, - <5 0 0 0x10000000 0x04000000>; - - #interrupt-cells = <1>; - interrupt-map-mask = <0 0 63>; - interrupt-map = <0 0 0 &gic 0 0 4>, - <0 0 1 &gic 0 1 4>, - <0 0 2 &gic 0 2 4>, - <0 0 3 &gic 0 3 4>, - <0 0 4 &gic 0 4 4>, - <0 0 5 &gic 0 5 4>, - <0 0 6 &gic 0 6 4>, - <0 0 7 &gic 0 7 4>, - <0 0 8 &gic 0 8 4>, - <0 0 9 &gic 0 9 4>, - <0 0 10 &gic 0 10 4>, - <0 0 11 &gic 0 11 4>, - <0 0 12 &gic 0 12 4>, - <0 0 13 &gic 0 13 4>, - <0 0 14 &gic 0 14 4>, - <0 0 15 &gic 0 15 4>, - <0 0 16 &gic 0 16 4>, - <0 0 17 &gic 0 17 4>, - <0 0 18 &gic 0 18 4>, - <0 0 19 &gic 0 19 4>, - <0 0 20 &gic 0 20 4>, - <0 0 21 &gic 0 21 4>, - <0 0 22 &gic 0 22 4>, - <0 0 23 &gic 0 23 4>, - <0 0 24 &gic 0 24 4>, - <0 0 25 &gic 0 25 4>, - <0 0 26 &gic 0 26 4>, - <0 0 27 &gic 0 27 4>, - <0 0 28 &gic 0 28 4>, - <0 0 29 &gic 0 29 4>, - <0 0 30 &gic 0 30 4>, - <0 0 31 &gic 0 31 4>, - <0 0 32 &gic 0 32 4>, - <0 0 33 &gic 0 33 4>, - <0 0 34 &gic 0 34 4>, - <0 0 35 &gic 0 35 4>, - <0 0 36 &gic 0 36 4>, - <0 0 37 &gic 0 37 4>, - <0 0 38 &gic 0 38 4>, - <0 0 39 &gic 0 39 4>, - <0 0 40 &gic 0 40 4>, - <0 0 41 &gic 0 41 4>, - <0 0 42 &gic 0 42 4>; - - /include/ "rtsm_ve-motherboard.dtsi" - }; -}; - -/include/ "clcd-panels.dtsi" diff --git a/arch/arm64/boot/dts/juno.dts b/arch/arm64/boot/dts/juno.dts deleted file mode 100644 index 45fd560e55973..0000000000000 --- a/arch/arm64/boot/dts/juno.dts +++ /dev/null @@ -1,498 +0,0 @@ -/* - * ARM Ltd. Juno Plaform - * - * Fast Models FVP v2 support - */ - -/dts-v1/; - -#include - -/ { - model = "Amlogic GX"; - compatible = "amlogic, Gx"; - interrupt-parent = <&gic>; - #address-cells = <2>; - #size-cells = <2>; - - aliases { - serial0 = &soc_uart0; - }; - - cpus { - #address-cells = <2>; - #size-cells = <0>; - - cpu@100 { - device_type = "cpu"; - compatible = "arm,cortex-a53","arm,armv8"; - reg = <0x0 0x100>; - enable-method = "psci"; - }; - - cpu@101 { - device_type = "cpu"; - compatible = "arm,cortex-a53","arm,armv8"; - reg = <0x0 0x101>; - enable-method = "psci"; - }; - - cpu@102 { - device_type = "cpu"; - compatible = "arm,cortex-a53","arm,armv8"; - reg = <0x0 0x102>; - enable-method = "psci"; - }; - - cpu@103 { - device_type = "cpu"; - compatible = "arm,cortex-a53","arm,armv8"; - reg = <0x0 0x103>; - enable-method = "psci"; - }; - - cpu@0 { - device_type = "cpu"; - compatible = "arm,cortex-a57","arm,armv8"; - reg = <0x0 0x0>; - enable-method = "psci"; - }; - - cpu@1 { - device_type = "cpu"; - compatible = "arm,cortex-a57","arm,armv8"; - reg = <0x0 0x1>; - enable-method = "psci"; - }; - }; - - memory@80000000 { - device_type = "memory"; - reg = <0x00000000 0x80000000 0x0 0x80000000>, - <0x00000008 0x80000000 0x1 0x80000000>; - }; - - /* memory@14000000 { - device_type = "memory"; - reg = <0x00000000 0x14000000 0x0 0x02000000>; - }; */ - - gic: interrupt-controller@2c001000 { - compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; - #interrupt-cells = <3>; - #address-cells = <0>; - interrupt-controller; - reg = <0x0 0x2c010000 0 0x1000>, - <0x0 0x2c02f000 0 0x1000>, - <0x0 0x2c04f000 0 0x2000>, - <0x0 0x2c06f000 0 0x2000>; - interrupts = ; - }; - - msi0: msi@2c1c0000 { - compatible = "arm,gic-msi"; - reg = <0x0 0x2c1c0000 0 0x10000 - 0x0 0x2c1d0000 0 0x10000 - 0x0 0x2c1e0000 0 0x10000 - 0x0 0x2c1f0000 0 0x10000>; - }; - - timer { - compatible = "arm,armv8-timer"; - interrupts = , - , - , - ; - }; - - pmu { - compatible = "arm,armv8-pmuv3"; - interrupts = , - , - , - ; - }; - - psci { - compatible = "arm,psci"; - method = "smc"; - cpu_suspend = <0xC4000001>; - cpu_off = <0x84000002>; - cpu_on = <0xC4000003>; - migrate = <0xC4000005>; - }; - - pci0: pci@30000000 { - compatible = "arm,pcie-xr3"; - device_type = "pci"; - reg = <0 0x7ff30000 0 0x1000 - 0 0x7ff20000 0 0x10000 - 0 0x40000000 0 0x10000000>; - bus-range = <0 255>; - #address-cells = <3>; - #size-cells = <2>; - ranges = <0x01000000 0x0 0x00000000 0x00 0x5ff00000 0x0 0x00100000 - 0x02000000 0x0 0x00000000 0x40 0x00000000 0x0 0x80000000 - 0x42000000 0x0 0x80000000 0x40 0x80000000 0x0 0x80000000>; - #interrupt-cells = <1>; - interrupt-map-mask = <0 0 0 7>; - interrupt-map = <0 0 0 1 &gic 0 136 4 - 0 0 0 2 &gic 0 137 4 - 0 0 0 3 &gic 0 138 4 - 0 0 0 4 &gic 0 139 4>; - }; - - scpi: scpi@2b1f0000 { - compatible = "arm,scpi-mhu"; - reg = <0x0 0x2b1f0000 0x0 0x10000>, /* MHU registers */ - <0x0 0x2e000000 0x0 0x10000>; /* Payload area */ - interrupts = <0 36 4>, /* low priority interrupt */ - <0 35 4>, /* high priority interrupt */ - <0 37 4>; /* secure channel interrupt */ - #clock-cells = <1>; - clock-output-names = "a57", "a53", "gpu", "hdlcd0", "hdlcd1"; - }; - - hdlcd0_osc: scpi_osc@3 { - compatible = "arm,scpi-osc"; - #clock-cells = <0>; - clocks = <&scpi 3>; - frequency-range = <23000000 210000000>; - clock-output-names = "pxlclk0"; - }; - - hdlcd1_osc: scpi_osc@4 { - compatible = "arm,scpi-osc"; - #clock-cells = <0>; - clocks = <&scpi 4>; - frequency-range = <23000000 210000000>; - clock-output-names = "pxlclk1"; - }; - - soc_uartclk: refclk72738khz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <7273800>; - clock-output-names = "juno:uartclk"; - }; - - soc_refclk24mhz: clk24mhz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <24000000>; - clock-output-names = "juno:clk24mhz"; - }; - - mb_eth25mhz: clk25mhz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <25000000>; - clock-output-names = "ethclk25mhz"; - }; - - soc_usb48mhz: clk48mhz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <48000000>; - clock-output-names = "clk48mhz"; - }; - - soc_smc50mhz: clk50mhz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <50000000>; - clock-output-names = "smc_clk"; - }; - - soc_refclk100mhz: refclk100mhz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <100000000>; - clock-output-names = "apb_pclk"; - }; - - soc_faxiclk: refclk533mhz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <533000000>; - clock-output-names = "faxi_clk"; - }; - - soc_fixed_3v3: fixedregulator@0 { - compatible = "regulator-fixed"; - regulator-name = "3V3"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-always-on; - }; - - memory-controller@7ffd0000 { - compatible = "arm,pl354", "arm,primecell"; - reg = <0 0x7ffd0000 0 0x1000>; - interrupts = <0 86 4>, - <0 87 4>; - clocks = <&soc_smc50mhz>; - clock-names = "apb_pclk"; - chip5-memwidth = <16>; - }; - - dma0: dma@0x7ff00000 { - compatible = "arm,pl330", "arm,primecell"; - reg = <0x0 0x7ff00000 0 0x1000>; - interrupts = <0 95 4>, - <0 88 4>, - <0 89 4>, - <0 90 4>, - <0 91 4>, - <0 108 4>, - <0 109 4>, - <0 110 4>, - <0 111 4>; - #dma-cells = <1>; - #dma-channels = <8>; - #dma-requests = <32>; - clocks = <&soc_faxiclk>; - clock-names = "apb_pclk"; - }; - - soc_uart0: uart@7ff80000 { - compatible = "arm,pl011", "arm,primecell"; - reg = <0x0 0x7ff80000 0x0 0x1000>; - interrupts = <0 83 4>; - clocks = <&soc_uartclk>, <&soc_refclk100mhz>; - clock-names = "uartclk", "apb_pclk"; - dmas = <&dma0 1 - &dma0 2>; - dma-names = "rx", "tx"; - }; - - /* this UART is reserved for secure software. - soc_uart1: uart@7ff70000 { - compatible = "arm,pl011", "arm,primecell"; - reg = <0x0 0x7ff70000 0x0 0x1000>; - interrupts = <0 84 4>; - clocks = <&soc_uartclk>, <&soc_refclk100mhz>; - clock-names = "uartclk", "apb_pclk"; - }; */ - - ulpi_phy: phy@0 { - compatible = "phy-ulpi-generic"; - reg = <0x0 0x94 0x0 0x4>; - phy-id = <0>; - }; - - ehci@7ffc0000 { - compatible = "snps,ehci-h20ahb"; - /* compatible = "arm,h20ahb-ehci"; */ - reg = <0x0 0x7ffc0000 0x0 0x10000>; - interrupts = <0 117 4>; - clocks = <&soc_usb48mhz>; - clock-names = "otg"; - phys = <&ulpi_phy>; - }; - - ohci@0x7ffb0000 { - compatible = "generic-ohci"; - reg = <0x0 0x7ffb0000 0x0 0x10000>; - interrupts = <0 116 4>; - clocks = <&soc_usb48mhz>; - clock-names = "otg"; - }; - - i2c@0x7ffa0000 { - #address-cells = <1>; - #size-cells = <0>; - compatible = "snps,designware-i2c"; - reg = <0x0 0x7ffa0000 0x0 0x1000>; - interrupts = <0 104 4>; - clock-frequency = <400000>; - i2c-sda-hold-time-ns = <500>; - clocks = <&soc_smc50mhz>; - - dvi0: dvi-transmitter@70 { - compatible = "nxp,tda998x"; - reg = <0x70>; - }; - - dvi1: dvi-transmitter@71 { - compatible = "nxp,tda998x"; - reg = <0x71>; - }; - }; - - /* mmci@1c050000 { - compatible = "arm,pl180", "arm,primecell"; - reg = <0x0 0x1c050000 0x0 0x1000>; - interrupts = <0 73 4>, - <0 74 4>; - max-frequency = <12000000>; - vmmc-supply = <&soc_fixed_3v3>; - clocks = <&soc_refclk24mhz>, <&soc_refclk100mhz>; - clock-names = "mclk", "apb_pclk"; - }; */ - - hdlcd@7ff60000 { - compatible = "arm,hdlcd"; - reg = <0 0x7ff60000 0 0x1000>; - interrupts = <0 85 4>; - clocks = <&hdlcd0_osc>; - clock-names = "pxlclk"; - i2c-slave = <&dvi0>; - - /* display-timings { - native-mode = <&timing0>; - timing0: timing@0 { - /* 1024 x 768 framebufer, standard VGA timings * / - clock-frequency = <65000>; - hactive = <1024>; - vactive = <768>; - hfront-porch = <24>; - hback-porch = <160>; - hsync-len = <136>; - vfront-porch = <3>; - vback-porch = <29>; - vsync-len = <6>; - }; - }; */ - }; - - hdlcd@7ff50000 { - compatible = "arm,hdlcd"; - reg = <0 0x7ff50000 0 0x1000>; - interrupts = <0 93 4>; - clocks = <&hdlcd1_osc>; - clock-names = "pxlclk"; - i2c-slave = <&dvi1>; - - display-timings { - native-mode = <&timing1>; - timing1: timing@1 { - /* 1024 x 768 framebufer, standard VGA timings */ - clock-frequency = <65000>; - hactive = <1024>; - vactive = <768>; - hfront-porch = <24>; - hback-porch = <160>; - hsync-len = <136>; - vfront-porch = <3>; - vback-porch = <29>; - vsync-len = <6>; - }; - }; - }; - - smb { - compatible = "simple-bus"; - #address-cells = <2>; - #size-cells = <1>; - ranges = <0 0 0 0x08000000 0x04000000>, - <1 0 0 0x14000000 0x04000000>, - <2 0 0 0x18000000 0x04000000>, - <3 0 0 0x1c000000 0x04000000>, - <4 0 0 0x0c000000 0x04000000>, - <5 0 0 0x10000000 0x04000000>; - - #interrupt-cells = <1>; - interrupt-map-mask = <0 0 15>; - interrupt-map = <0 0 0 &gic 0 68 4>, - <0 0 1 &gic 0 69 4>, - <0 0 2 &gic 0 70 4>, - <0 0 3 &gic 0 160 4>, - <0 0 4 &gic 0 161 4>, - <0 0 5 &gic 0 162 4>, - <0 0 6 &gic 0 163 4>, - <0 0 7 &gic 0 164 4>, - <0 0 8 &gic 0 165 4>, - <0 0 9 &gic 0 166 4>, - <0 0 10 &gic 0 167 4>, - <0 0 11 &gic 0 168 4>, - <0 0 12 &gic 0 169 4>; - - motherboard { - model = "V2M-Juno"; - arm,hbi = <0x252>; - arm,vexpress,site = <0>; - arm,v2m-memory-map = "rs1"; - compatible = "arm,vexpress,v2p-p1", "simple-bus"; - #address-cells = <2>; /* SMB chipselect number and offset */ - #size-cells = <1>; - #interrupt-cells = <1>; - ranges; - - usb@5,00000000 { - compatible = "nxp,usb-isp1763"; - reg = <5 0x00000000 0x20000>; - bus-width = <16>; - interrupts = <4>; - }; - - ethernet@2,00000000 { - compatible = "smsc,lan9118", "smsc,lan9115"; - reg = <2 0x00000000 0x10000>; - interrupts = <3>; - phy-mode = "mii"; - reg-io-width = <4>; - smsc,irq-active-high; - smsc,irq-push-pull; - clocks = <&mb_eth25mhz>; - vdd33a-supply = <&soc_fixed_3v3>; /* change this */ - vddvario-supply = <&soc_fixed_3v3>; /* and this */ - }; - - iofpga@3,00000000 { - compatible = "arm,amba-bus", "simple-bus"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 3 0 0x200000>; - - kmi@060000 { - compatible = "arm,pl050", "arm,primecell"; - reg = <0x060000 0x1000>; - interrupts = <8>; - clocks = <&soc_refclk24mhz>, <&soc_smc50mhz>; - clock-names = "KMIREFCLK", "apb_pclk"; - }; - - kmi@070000 { - compatible = "arm,pl050", "arm,primecell"; - reg = <0x070000 0x1000>; - interrupts = <8>; - clocks = <&soc_refclk24mhz>, <&soc_smc50mhz>; - clock-names = "KMIREFCLK", "apb_pclk"; - }; - - wdt@0f0000 { - compatible = "arm,sp805", "arm,primecell"; - reg = <0x0f0000 0x10000>; - interrupts = <7>; - clocks = <&soc_refclk24mhz>, <&soc_smc50mhz>; - clock-names = "wdogclk", "apb_pclk"; - }; - - v2m_timer01: timer@110000 { - compatible = "arm,sp804", "arm,primecell"; - reg = <0x110000 0x10000>; - interrupts = <9>; - clocks = <&soc_refclk24mhz>, <&soc_smc50mhz>; - clock-names = "timclken1", "apb_pclk"; - }; - - v2m_timer23: timer@120000 { - compatible = "arm,sp804", "arm,primecell"; - reg = <0x120000 0x10000>; - interrupts = <9>; - clocks = <&soc_refclk24mhz>, <&soc_smc50mhz>; - clock-names = "timclken1", "apb_pclk"; - }; - - rtc@170000 { - compatible = "arm,pl031", "arm,primecell"; - reg = <0x170000 0x10000>; - interrupts = <0>; - clocks = <&soc_smc50mhz>; - clock-names = "apb_pclk"; - }; - }; - }; - }; -}; diff --git a/arch/arm64/boot/dts/kvim.dts b/arch/arm64/boot/dts/kvim.dts index 3c3924ae2e31f..c6942e4c79fa0 100644 --- a/arch/arm64/boot/dts/kvim.dts +++ b/arch/arm64/boot/dts/kvim.dts @@ -22,7 +22,7 @@ #include #include #include -#include "amlogic/mesongxl.dtsi" +#include "mesongxl.dtsi" #include "partitions.dtsi" / { model = "Amlogic"; diff --git a/arch/arm64/boot/dts/kvim2_dualos.dts b/arch/arm64/boot/dts/kvim2_dualos.dts new file mode 100644 index 0000000000000..ad60988c2e8be --- /dev/null +++ b/arch/arm64/boot/dts/kvim2_dualos.dts @@ -0,0 +1,2470 @@ +/dts-v1/; + +/ { + model = "Amlogic"; + compatible = "kvim"; + amlogic-dt-id = "kvim"; + interrupt-parent = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + + t82x { + compatible = "arm,malit602", "arm,malit60x", "arm,malit6xx", "arm,mali-midgard"; + #cooling-cells = <0x2>; + reg = <0x0 0xd00c0000 0x0 0x100000 0x0 0xc1104440 0x0 0x1000 0x0 0xc8100000 0x0 0x1000 0x0 0xc883c000 0x0 0x1000 0x0 0xc1104440 0x0 0x1000>; + interrupt-parent = <0x1>; + interrupts = <0x0 0xa0 0x4 0x0 0xa1 0x4 0x0 0xa2 0x4>; + interrupt-names = "GPU", "MMU", "JOB"; + num_of_pp = <0x3>; + sc_mpp = <0x1>; + operating-points = <0xa2c2a 0xf4240 0x7a120 0xf4240 0x61a80 0xf4240 0x45c12 0xf4240 0x3d090 0xf4240 0x1e848 0xf4240>; + tbl = <0x2 0x3 0x4 0x5 0x5>; + clocks = <0x6 0x8 0x6 0x9 0x6 0x11 0x6 0x12 0x6 0x1e 0x6 0x15 0x6 0x13 0x6 0x14>; + clock-names = "fclk_div3", "fclk_div4", "fclk_div5", "fclk_div7", "gp0_pll", "clk_gpu", "clk_gpu_0", "clk_gpu_1"; + linux,phandle = <0x85>; + phandle = <0x85>; + + clk125_cfg { + clk_freq = <0x7735940>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x1e 0x78>; + }; + + dvfs250_cfg { + clk_freq = <0xee6b280>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x50 0xaa>; + }; + + dvfs285_cfg { + clk_freq = <0x1107a650>; + clk_parent = "fclk_div7"; + clkp_freq = <0x1107a650>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x64 0xbe>; + linux,phandle = <0x2>; + phandle = <0x2>; + }; + + dvfs400_cfg { + clk_freq = <0x17d78400>; + clk_parent = "fclk_div5"; + clkp_freq = <0x17d78400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x98 0xcf>; + linux,phandle = <0x3>; + phandle = <0x3>; + }; + + dvfs500_cfg { + clk_freq = <0x1dcd6500>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xb4 0xdc>; + linux,phandle = <0x4>; + phandle = <0x4>; + }; + + dvfs666_cfg { + clk_freq = <0x27b25a80>; + clk_parent = "fclk_div3"; + clkp_freq = <0x27b25a80>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xd2 0xec>; + linux,phandle = <0x5>; + phandle = <0x5>; + }; + + dvfs800_cfg { + clk_freq = <0x2f34f600>; + clk_parent = "gp0_pll"; + clkp_freq = <0x2f34f600>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xe6 0xff>; + }; + }; + + gpu_clk@c883c00 { + compatible = "meson, gpu-clkgen-1.00.a"; + #clock-cells = <0x0>; + reg = <0x0 0xc883c000 0x0 0x1000>; + clocks = <0x6 0x8 0x6 0x9 0x6 0x11 0x6 0x12 0x6 0x1e 0x6 0x15 0x6 0x13 0x6 0x14>; + clock-names = "fclk_div3", "fclk_div4", "fclk_div5", "fclk_div7", "gp0_pll", "clk_gpu", "clk_gpu_0", "clk_gpu_1"; + clock-output-names = "clk_mali"; + tbl = <0x7 0x8 0x9 0xa 0xb 0xc>; + + clk125_cfg { + clk_freq = <0x7735940>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x1e 0x78>; + linux,phandle = <0x7>; + phandle = <0x7>; + }; + + clk250_cfg { + clk_freq = <0xee6b280>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x50 0xaa>; + linux,phandle = <0x8>; + phandle = <0x8>; + }; + + clk285_cfg { + clk_freq = <0x1107a650>; + clk_parent = "fclk_div7"; + clkp_freq = <0x1107a650>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x64 0xbe>; + linux,phandle = <0x9>; + phandle = <0x9>; + }; + + clk400_cfg { + clk_freq = <0x17d78400>; + clk_parent = "fclk_div5"; + clkp_freq = <0x17d78400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x98 0xcf>; + linux,phandle = <0xa>; + phandle = <0xa>; + }; + + clk500_cfg { + clk_freq = <0x1dcd6500>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xb4 0xdc>; + linux,phandle = <0xb>; + phandle = <0xb>; + }; + + clk666_cfg { + clk_freq = <0x27bc8410>; + clk_parent = "fclk_div3"; + clkp_freq = <0x27bc8410>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xd2 0xec>; + linux,phandle = <0xc>; + phandle = <0xc>; + }; + + clk720_cfg { + clk_freq = <0x2aea5400>; + clk_parent = "gp0_pll"; + clkp_freq = <0x2aea5400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xe6 0xff>; + }; + }; + + cpus { + #address-cells = <0x2>; + #size-cells = <0x0>; + + cpu-map { + + cluster0 { + #cooling-cells = <0x2>; + linux,phandle = <0x81>; + phandle = <0x81>; + + core0 { + cpu = <0xd>; + }; + + core1 { + cpu = <0xe>; + }; + + core2 { + cpu = <0xf>; + }; + + core3 { + cpu = <0x10>; + }; + }; + + cluster1 { + #cooling-cells = <0x2>; + linux,phandle = <0x82>; + phandle = <0x82>; + + core0 { + cpu = <0x11>; + }; + + core1 { + cpu = <0x12>; + }; + + core2 { + cpu = <0x13>; + }; + + core3 { + cpu = <0x14>; + }; + }; + }; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xd>; + phandle = <0xd>; + }; + + cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xe>; + phandle = <0xe>; + }; + + cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xf>; + phandle = <0xf>; + }; + + cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x10>; + phandle = <0x10>; + }; + + cpu@100 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x100>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x11>; + phandle = <0x11>; + }; + + cpu@101 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x101>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x12>; + phandle = <0x12>; + }; + + cpu@102 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x102>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x13>; + phandle = <0x13>; + }; + + cpu@103 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x103>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x14>; + phandle = <0x14>; + }; + + idle-states { + entry-method = "arm,psci"; + + cpu-sleep-0 { + compatible = "arm, idle-state"; + arm,psci-suspend-param = <0x10000>; + local-timer-stop; + entry-latency-us = <0x1f40>; + exit-latency-us = <0x1f40>; + min-residency-us = <0x4e20>; + linux,phandle = <0x16>; + phandle = <0x16>; + }; + + cluster-sleep-0 { + compatible = "arm, idle-state"; + arm,psci-suspend-param = <0x1010000>; + local-timer-stop; + entry-latency-us = <0x1f40>; + exit-latency-us = <0x1f40>; + min-residency-us = <0x61a8>; + linux,phandle = <0x17>; + phandle = <0x17>; + }; + }; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x1 0xd 0xff01 0x1 0xe 0xff01 0x1 0xb 0xff01 0x1 0xa 0xff01>; + }; + + timer_bc { + compatible = "arm, meson-bc-timer"; + reg = <0x0 0xc1109990 0x0 0x4 0x0 0xc1109994 0x0 0x4>; + timer_name = "Meson TimerF"; + clockevent-rating = <0x12c>; + clockevent-shift = <0x14>; + clockevent-features = <0x23>; + interrupts = <0x0 0x3c 0x1>; + bit_enable = <0x10>; + bit_mode = <0xc>; + bit_resolution = <0x0>; + }; + + arm_pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0x0 0x89 0x4 0x0 0x8a 0x4 0x0 0x99 0x4 0x0 0x9a 0x4>; + }; + + pm { + compatible = "amlogic, pm"; + device_name = "aml_pm"; + gxbaby-suspend; + reg = <0x0 0xc81000a8 0x0 0x4 0x0 0xc810023c 0x0 0x4>; + }; + + interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <0x3>; + #address-cells = <0x0>; + interrupt-controller; + reg = <0x0 0xc4301000 0x0 0x1000 0x0 0xc4302000 0x0 0x100>; + interrupts = <0x1 0x9 0xf04>; + linux,phandle = <0x1>; + phandle = <0x1>; + }; + + aml_restart { + compatible = "aml, restart"; + sys_reset = <0x84000009>; + sys_poweroff = <0x84000008>; + }; + + psci { + compatible = "arm,psci"; + method = "smc"; + cpu_suspend = <0xc4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xc4000003>; + migrate = <0xc4000005>; + }; + + secmon { + compatible = "amlogic, secmon"; + memory-region = <0x18>; + in_base_func = <0x82000020>; + out_base_func = <0x82000021>; + }; + + securitykey { + compatible = "aml, securitykey"; + storage_query = <0x82000060>; + storage_read = <0x82000061>; + storage_write = <0x82000062>; + storage_tell = <0x82000063>; + storage_verify = <0x82000064>; + storage_status = <0x82000065>; + storage_list = <0x82000067>; + storage_remove = <0x82000068>; + storage_in_func = <0x82000023>; + storage_out_func = <0x82000024>; + storage_block_func = <0x82000025>; + storage_size_func = <0x82000027>; + storage_set_enctype = <0x8200006a>; + storage_get_enctype = <0x8200006b>; + storage_version = <0x8200006c>; + }; + + cpu_iomap { + compatible = "amlogic, iomap"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_cbus_base { + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + + io_apb_base { + reg = <0x0 0xd0000000 0x0 0x200000>; + }; + + io_aobus_base { + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + }; + + cpufreq { + compatible = "arm, scpi-cpufreq"; + }; + + amlogic-watchdog { + compatible = "amlogic, gx-wdt"; + status = "disable"; + default_timeout = <0xa>; + reset_watchdog_method = <0x1>; + reset_watchdog_time = <0x2>; + shutdown_timeout = <0xa>; + firmware_timeout = <0x6>; + suspend_timeout = <0x6>; + reg = <0x0 0xc11098d0 0x0 0x10>; + clocks = <0x6 0x2>; + }; + + amlogic-jtag { + compatible = "amlogic, jtag"; + status = "okay"; + pinctrl-names = "jtag_apao_pins", "jtag_apee_pins"; + pinctrl-0 = <0x19>; + pinctrl-1 = <0x1a>; + }; + + meson_clock { + compatible = "amlogic, gxl-clock"; + reg = <0x0 0xc883c000 0x0 0x1000 0x0 0xc8100000 0x0 0x1000>; + #clock-cells = <0x1>; + #reset-cells = <0x1>; + sys_max = <0x5b8d8000>; + linux,phandle = <0x6>; + phandle = <0x6>; + }; + + cpu_info { + compatible = "amlogic, cpuinfo"; + cpuinfo_cmd = <0x82000044>; + }; + + pinmux { + compatible = "amlogic, pinmux-gxl"; + dev_name = "pinmux"; + #pinmux-cells = <0x2>; + #address-cells = <0x2>; + #size-cells = <0x2>; + reg = <0x0 0xc1109880 0x0 0x10>; + ranges; + + banks@c11080b0 { + reg = <0x0 0xc88344b0 0x0 0x28 0x0 0xc88344e8 0x0 0x14 0x0 0xc8834520 0x0 0x14 0x0 0xc8834430 0x0 0x40>; + reg-names = "mux", "pull", "pull-enable", "gpio"; + gpio-controller; + #gpio-cells = <0x2>; + linux,phandle = <0x38>; + phandle = <0x38>; + }; + + ao-bank@c1108030 { + reg = <0x0 0xc8100014 0x0 0x8 0x0 0xc810002c 0x0 0x4 0x0 0xc8100024 0x0 0x8>; + reg-names = "mux", "pull", "gpio"; + gpio-controller; + #gpio-cells = <0x2>; + linux,phandle = <0x37>; + phandle = <0x37>; + }; + + external_eth_pins { + amlogic,setmask = <0x4 0xfffc00>; + amlogic,clrmask = <0x4 0x3fc 0x3 0xffcff800>; + amlogic,pins = "GPIOZ_0", "GPIOZ_1", "GPIOZ_2", "GPIOZ_3", "GPIOZ_4", "GPIOZ_5", "GPIOZ_6", "GPIOZ_7", "GPIOZ_8", "GPIOZ_9", "GPIOZ_10", "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + linux,phandle = <0x3b>; + phandle = <0x3b>; + }; + + internal_eth_pins { + amlogic,setmask = <0x4 0x3000000>; + amlogic,clrmask = <0x3 0x300000>; + amlogic,pins = "GPIOZ_14", "GPIOZ_15"; + }; + + jtag_apao_pin { + amlogic,clrmask = <0x6 0x7fe0000>; + amlogic,pins = "GPIOH_6", "GPIOH_7", "GPIOH_8", "GPIOH_9"; + linux,phandle = <0x19>; + phandle = <0x19>; + }; + + jtag_apee_pin { + amlogic,clrmask = <0x6 0x3c>; + amlogic,pins = "CARD_0", "CARD_1", "CARD_2", "CARD_3"; + linux,phandle = <0x1a>; + phandle = <0x1a>; + }; + + remote_pin { + amlogic,setmask = <0x10 0x1>; + amlogic,pins = "GPIOAO_7"; + linux,phandle = <0x26>; + phandle = <0x26>; + }; + + ao_uart { + amlogic,setmask = <0x10 0x1800>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + }; + + ao_b_uart { + amlogic,setmask = <0x10 0x1800000>; + amlogic,pins = "GPIOAO_4", "GPIOAO_5"; + linux,phandle = <0x6b>; + phandle = <0x6b>; + }; + + a_uart { + amlogic,setmask = <0x5 0xf0000>; + amlogic,clrmask = <0x5 0x3c0>; + amlogic,pins = "GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15"; + linux,phandle = <0x68>; + phandle = <0x68>; + }; + + b_uart { + amlogic,setmask = <0x2 0x18000>; + amlogic,pins = "GPIODV_24", "GPIODV_25"; + linux,phandle = <0x69>; + phandle = <0x69>; + }; + + c_uart { + amlogic,setmask = <0x5 0x3000>; + amlogic,pins = "GPIOX_8", "GPIOX_9"; + linux,phandle = <0x6a>; + phandle = <0x6a>; + }; + + wifi_32k_pins { + amlogic,setmask = <0x5 0x8000>; + amlogic,pins = "GPIOX_16"; + linux,phandle = <0x41>; + phandle = <0x41>; + }; + + sd_clk_cmd_pins { + amlogic,setmask = <0x6 0xc 0x10 0x1800>; + amlogic,pins = "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x47>; + phandle = <0x47>; + }; + + sd_all_pins { + amlogic,setmask = <0x6 0x3f 0x10 0x1800>; + amlogic,clrmask = <0x6 0xfc0>; + amlogic,pins = "CARD_0", "CARD_1", "CARD_2", "CARD_3", "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x48>; + phandle = <0x48>; + }; + + sd_1bit_pins { + amlogic,setmask = <0x6 0x1c 0x10 0x1800>; + amlogic,clrmask = <0x6 0xcc3>; + amlogic,pins = "CARD_1", "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x49>; + phandle = <0x49>; + }; + + sd_clk_cmd_uart_pins { + amlogic,setmask = <0x6 0x30c>; + amlogic,clrmask = <0x6 0xcc3 0x10 0x1800>; + amlogic,pins = "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4a>; + phandle = <0x4a>; + }; + + sd_1bit_uart_pins { + amlogic,setmask = <0x6 0x31c>; + amlogic,clrmask = <0x6 0xcc3 0x10 0x1800>; + amlogic,pins = "CARD_1", "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4b>; + phandle = <0x4b>; + }; + + sd_to_ao_uart_pins { + amlogic,setmask = <0x10 0x1800>; + amlogic,clrmask = <0x6 0x300>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4c>; + phandle = <0x4c>; + }; + + ao_to_sd_uart_pins { + amlogic,setmask = <0x6 0x300>; + amlogic,clrmask = <0x10 0x1800 0x6 0xcc3>; + amlogic,pins = "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4d>; + phandle = <0x4d>; + }; + + ao_to_sd_jtag_pins { + amlogic,setmask = <0x6 0x300>; + amlogic,clrmask = <0x6 0xcff 0x10 0x1800>; + amlogic,pins = "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4e>; + phandle = <0x4e>; + }; + + sd_to_ao_jtag_pins { + amlogic,setmask = <0x10 0x1800>; + amlogic,clrmask = <0x6 0xfc0>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4f>; + phandle = <0x4f>; + }; + + emmc_clk_cmd_pins { + amlogic,setmask = <0x7 0x60000000>; + amlogic,clrmask = <0x7 0xe0>; + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x43>; + phandle = <0x43>; + }; + + emmc_conf_pull_up { + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_10"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x44>; + phandle = <0x44>; + }; + + emmc_conf_pull_done { + amlogic,pins = "BOOT_15"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x45>; + phandle = <0x45>; + }; + + emmc_all_pins { + amlogic,setmask = <0x7 0xf0000000>; + amlogic,clrmask = <0x7 0xe0>; + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_10", "BOOT_15"; + amlogic,enable-output = <0x1>; + linux,phandle = <0x46>; + phandle = <0x46>; + }; + + sdio_clk_cmd_pins { + amlogic,setmask = <0x5 0xc000000>; + amlogic,pins = "GPIOX_4", "GPIOX_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x50>; + phandle = <0x50>; + }; + + sdio_all_pins { + amlogic,setmask = <0x5 0xfc000000>; + amlogic,pins = "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", "GPIOX_4", "GPIOX_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x51>; + phandle = <0x51>; + }; + + conf_nand_pulldown { + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_15"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x52>; + phandle = <0x52>; + }; + + conf_nand_pullup { + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x53>; + phandle = <0x53>; + }; + + all_nand_pins { + amlogic,setmask = <0x7 0x800000ff>; + amlogic,clrmask = <0x7 0x70ffbc00>; + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_9", "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14", "BOOT_15"; + amlogic,enable-output = <0x1>; + linux,phandle = <0x54>; + phandle = <0x54>; + }; + + nand_cs { + amlogic,setmask = <0x7 0xc0>; + amlogic,clrmask = <0x7 0x40040000>; + amlogic,pins = "BOOT_8", "BOOT_9"; + linux,phandle = <0x55>; + phandle = <0x55>; + }; + + hdmitx_hpd { + amlogic,setmask = <0x6 0x80000000>; + amlogic,pins = "GPIOH_0"; + linux,phandle = <0x65>; + phandle = <0x65>; + }; + + hdmitx_ddc { + amlogic,setmask = <0x6 0x30000000>; + amlogic,pins = "GPIOH_1", "GPIOH_2"; + linux,phandle = <0x66>; + phandle = <0x66>; + }; + + hdmitx_aocec { + amlogic,setmask = <0x10 0x8000>; + amlogic,clrmask = <0x10 0x24000 0x11 0x1>; + amlogic,pins = "GPIOAO_8"; + linux,phandle = <0x67>; + phandle = <0x67>; + }; + + hdmitx_eecec { + amlogic,setmask = <0x10 0x4000>; + amlogic,clrmask = <0x10 0x28000 0x11 0x1>; + amlogic,pins = "GPIOAO_8"; + }; + + ao_i2c { + amlogic,setmask = <0x10 0x60>; + amlogic,clrmask = <0x10 0x1800006>; + amlogic,pins = "GPIOAO_4", "GPIOAO_5"; + linux,phandle = <0x1b>; + phandle = <0x1b>; + }; + + a_i2c { + amlogic,setmask = <0x1 0xc000>; + amlogic,clrmask = <0x3 0x18 0x2 0x18000 0x2 0xc0 0x1 0x600000>; + amlogic,pins = "GPIODV_24", "GPIODV_25"; + linux,phandle = <0x1c>; + phandle = <0x1c>; + }; + + b_i2c { + amlogic,setmask = <0x1 0x3000>; + amlogic,clrmask = <0x2 0x6000 0x1 0x1c0000>; + amlogic,pins = "GPIODV_26", "GPIODV_27"; + linux,phandle = <0x1d>; + phandle = <0x1d>; + }; + + c_i2c { + amlogic,setmask = <0x1 0xc00>; + amlogic,clrmask = <0x2 0x1800 0x1 0x200 0x2 0x20>; + amlogic,pins = "GPIODV_28", "GPIODV_29"; + linux,phandle = <0x1e>; + phandle = <0x1e>; + }; + + c_i2c_pin1 { + amlogic,setmask = <0x1 0x30000>; + amlogic,clrmask = <0x1 0x2000000 0x3 0x20>; + amlogic,pins = "GPIODV_18", "GPIODV_19"; + }; + + d_i2c { + amlogic,setmask = <0x5 0x30>; + amlogic,clrmask = <0x5 0x300c03 0x6 0x3>; + amlogic,pins = "GPIOX_10", "GPIOX_11"; + linux,phandle = <0x1f>; + phandle = <0x1f>; + }; + + spicc_pins_z11z12z13 { + amlogic,setmask = <0x4 0x1c>; + amlogic,clrmask = <0x3 0x800 0x4 0x1c00>; + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + }; + + spicc_pulldown_z11z12z13 { + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + }; + + spicc_pullup_z11z12z13 { + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + }; + + spicc_pins_x8x9x11 { + amlogic,setmask = <0x5 0xd>; + amlogic,clrmask = <0x5 0xd03430 0x6 0xd>; + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + }; + + spicc_pulldown_x8x9x11 { + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + }; + + spicc_pullup_x8x9x11 { + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + }; + + audio_pin { + amlogic,setmask = <0x6 0x7800000>; + amlogic,clrmask = <0x6 0x7e0000>; + amlogic,pins = "GPIOH_6", "GPIOH_7", "GPIOH_8", "GPIOH_9"; + linux,phandle = <0x70>; + phandle = <0x70>; + }; + + audio_pin1 { + amlogic,setmask = <0x6 0x10000000>; + amlogic,clrmask = <0x6 0x8000000>; + amlogic,pins = "GPIOH_4"; + linux,phandle = <0x6f>; + phandle = <0x6f>; + }; + + audio_btpcm_pins { + amlogic,setmask = <0x5 0xf00000>; + amlogic,clrmask = <0x5 0x3c33>; + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11"; + linux,phandle = <0x6e>; + phandle = <0x6e>; + }; + }; + + cpu_version { + reg = <0x0 0xc8100220 0x0 0x4>; + }; + + meson_clk_msr { + compatible = "amlogic, gxl_measure"; + reg = <0x0 0xc110875c 0x0 0x4 0x0 0xc1108764 0x0 0x4>; + }; + + i2c@c8100500 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-AO"; + status = "disabled"; + reg = <0x0 0xc8100500 0x0 0x1d>; + device_id = <0x0>; + pinctrl-names = "default"; + pinctrl-0 = <0x1b>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c1108500 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-A"; + status = "disabled"; + reg = <0x0 0xc1108500 0x0 0x20>; + device_id = <0x1>; + pinctrl-names = "default"; + pinctrl-0 = <0x1c>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c11087c0 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-B"; + status = "okay"; + reg = <0x0 0xc11087c0 0x0 0x20>; + device_id = <0x2>; + pinctrl-names = "default"; + pinctrl-0 = <0x1d>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x186a0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + + khadas-hym8563 { + compatible = "khadas-hym8563"; + reg = <0x51>; + }; + }; + + i2c@c11087e0 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-C"; + status = "disabled"; + reg = <0x0 0xc11087e0 0x0 0x20>; + device_id = <0x3>; + pinctrl-names = "default"; + pinctrl-0 = <0x1e>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c1108d20 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-D"; + status = "disabled"; + reg = <0x0 0xc1108d20 0x0 0x20>; + device_id = <0x4>; + pinctrl-names = "default"; + pinctrl-0 = <0x1f>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + efuse { + compatible = "amlogic, efuse"; + read_cmd = <0x82000030>; + write_cmd = <0x82000031>; + get_max_cmd = <0x82000033>; + key = <0x20>; + resets = <0x6 0x3e>; + reset-names = "efuse_clk"; + status = "ok"; + }; + + efusekey { + keynum = <0x4>; + key0 = <0x21>; + key1 = <0x22>; + key2 = <0x23>; + key3 = <0x24>; + linux,phandle = <0x20>; + phandle = <0x20>; + + key_0 { + keyname = "mac"; + offset = <0x0>; + size = <0xc>; + linux,phandle = <0x21>; + phandle = <0x21>; + }; + + key_1 { + keyname = "mac_bt"; + offset = <0xc>; + size = <0xc>; + linux,phandle = <0x22>; + phandle = <0x22>; + }; + + key_2 { + keyname = "mac_wifi"; + offset = <0x18>; + size = <0xc>; + linux,phandle = <0x23>; + phandle = <0x23>; + }; + + key_3 { + keyname = "usid"; + offset = <0x24>; + size = <0xc>; + linux,phandle = <0x24>; + phandle = <0x24>; + }; + }; + + mhu@c883c400 { + compatible = "amlogic, meson_mhu"; + reg = <0x0 0xc883c400 0x0 0x4c 0x0 0xc8013000 0x0 0x800>; + interrupts = <0x0 0xd1 0x8 0x0 0xd2 0x8>; + #mbox-cells = <0x1>; + mbox-names = "cpu_to_scp_low", "cpu_to_scp_high"; + mboxes = <0x25 0x0 0x25 0x1>; + linux,phandle = <0x25>; + phandle = <0x25>; + }; + + scpi_clocks { + compatible = "arm,scpi-clks"; + + scpi_clocks@0 { + compatible = "arm,scpi-clk-indexed"; + #clock-cells = <0x1>; + clock-indices = <0x0 0x1>; + clock-output-names = "vbig", "vlittle"; + linux,phandle = <0x15>; + phandle = <0x15>; + }; + }; + + rc@c8100580 { + compatible = "amlogic, aml_remote"; + dev_name = "meson-remote"; + reg = <0x0 0xc8100580 0x0 0x44 0x0 0xc8100480 0x0 0x20>; + status = "okay"; + protocol = <0x1>; + interrupts = <0x0 0xc4 0x1>; + pinctrl-names = "default"; + pinctrl-0 = <0x26>; + map = <0x27>; + max_frame_time = <0xc8>; + }; + + custom_maps { + mapnum = <0x4>; + map0 = <0x28>; + map1 = <0x29>; + map2 = <0x2a>; + map3 = <0x2b>; + linux,phandle = <0x27>; + phandle = <0x27>; + + map_0 { + mapname = "amlogic-remote-1"; + customcode = <0xfb04>; + release_delay = <0x50>; + size = <0x2c>; + keymap = <0x47000b 0x130002 0x100003 0x110004 0xf0005 0xc0006 0xd0007 0xb0008 0x80009 0x9000a 0x5c0061 0x510041 0x49000e 0x60082 0x140083 0x440067 0x1d006c 0x1c0069 0x48006a 0x53007d 0x450068 0x19006d 0x160066 0x520077 0x5007a 0x59007b 0x1b0078 0x40079 0x1a0074 0xa000f 0xe0071 0x15003f 0x1f0066 0x1e0084 0x70085 0x120086 0x540087 0x20088 0x4f001e 0x420030 0x5d002e 0x4c0020 0x580089 0x55008c>; + linux,phandle = <0x28>; + phandle = <0x28>; + }; + + map_1 { + mapname = "amlogic-remote-2"; + customcode = <0xfe01>; + release_delay = <0x50>; + size = <0x35>; + keymap = <0x10002 0x20003 0x30004 0x40005 0x50006 0x60007 0x70008 0x80009 0x9000a 0xa000b 0x1f01d2 0x15008b 0x16000f 0xc0192 0xd0193 0xe0073 0xf0072 0x110066 0x1c006a 0x1b0069 0x190067 0x1a006c 0x1d001c 0x170071 0x4900db 0x43009e 0x1201d5 0x1401d6 0x1801d7 0x590166 0x5a00a6 0x100074 0x4200a5 0x4400a3 0x1e00a8 0x4b00d0 0x5800a4 0x460082 0x400083 0x380046 0x5701d0 0x5b01d1 0x54018e 0x4c018f 0x4e0190 0x550191 0x5300ed 0x5200ee 0x3900d4 0x4100d5 0xb00d6 0xd8 0x1300d9>; + linux,phandle = <0x29>; + phandle = <0x29>; + }; + + map_2 { + mapname = "amlogic-remote-3"; + customcode = <0xbd02>; + release_delay = <0x50>; + size = <0x11>; + keymap = <0xca0067 0xd2006c 0x990069 0xc1006a 0xce0061 0x450074 0xc50085 0x800071 0xd0000f 0xd6007d 0x950066 0xdd0068 0x8c006d 0x890083 0x9c0082 0x9a0078 0xcd0079>; + linux,phandle = <0x2a>; + phandle = <0x2a>; + }; + + map_3 { + mapname = "khadas-ir"; + customcode = <0xff00>; + release_delay = <0x50>; + fn_key_scancode = <0x5c>; + fn_key_scancode_other = <0x5b>; + cursor_left_scancode = <0xe>; + cursor_right_scancode = <0x1a>; + cursor_up_scancode = <0x3>; + cursor_down_scancode = <0x2>; + cursor_ok_scancode = <0x7>; + size = <0xd>; + keymap = <0x140074 0x13008b 0x30067 0x2006c 0xe0069 0x1a006a 0x700e8 0x580072 0x5c003f 0x5b003f 0xb0073 0x1009e 0x480066>; + linux,phandle = <0x2b>; + phandle = <0x2b>; + }; + }; + + rng { + compatible = "amlogic,meson-rng"; + reg = <0x0 0xc8834000 0x0 0x4>; + }; + + audio_data { + compatible = "amlogic, audio_data"; + query_licence_cmd = <0x82000050>; + status = "okay"; + }; + + saradc { + compatible = "amlogic, saradc"; + status = "okay"; + interrupts = <0x0 0x9 0x1>; + interrupt-names = "saradc_int"; + clocks = <0x6 0x2>; + clock-names = "saradc_clk"; + resets = <0x6 0x56>; + reg = <0x0 0xc1108680 0x0 0x30 0x0 0xc883c3d8 0x0 0x8>; + }; + + defendkey { + compatible = "amlogic, defendkey"; + reg = <0x0 0xc8834500 0x0 0x4>; + mem_size = <0x0 0x100000>; + status = "okay"; + }; + + spicc { + compatible = "amlogic, spicc"; + status = "disabled"; + reg = <0x0 0xc1108d80 0x0 0x28>; + resets = <0x6 0x8>; + reset-names = "spicc_clk"; + clocks = <0x6 0xa>; + clock-names = "clk81"; + interrupts = <0x0 0x51 0x1>; + device_id = <0x0>; + }; + + aml_aes { + compatible = "amlogic,aes_dma"; + dev_name = "aml_aes_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aml_tdes { + compatible = "amlogic,des_dma,tdes_dma"; + dev_name = "aml_tdes_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aml_sha { + compatible = "amlogic,sha_dma"; + dev_name = "aml_sha_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + meson-pwm { + compatible = "amlogic, meson-pwm"; + status = "okay"; + #pwm-cells = <0x2>; + pwm-outputs = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf>; + reg = <0x0 0xc1108550 0x0 0x1c 0x0 0xc1108640 0x0 0x1c 0x0 0xc11086c0 0x0 0x1c 0x0 0xc8100550 0x0 0x1c>; + clocks = <0x6 0x2 0x6 0x5 0x6 0x9 0x6 0x8>; + clock-names = "xtal", "vid_pll_clk", "fclk_div4", "fclk_div3"; + clock-select = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0>; + }; + + partitions { + parts = <0xb>; + part-0 = <0x2c>; + part-1 = <0x2d>; + part-2 = <0x2e>; + part-3 = <0x2f>; + part-4 = <0x30>; + part-5 = <0x31>; + part-6 = <0x32>; + part-7 = <0x33>; + part-8 = <0x34>; + part-9 = <0x35>; + part-10 = <0x36>; + + logo { + pname = "logo"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x2c>; + phandle = <0x2c>; + }; + + recovery { + pname = "recovery"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x2d>; + phandle = <0x2d>; + }; + + rsv { + pname = "rsv"; + size = <0x0 0x800000>; + mask = <0x1>; + linux,phandle = <0x2e>; + phandle = <0x2e>; + }; + + tee { + pname = "tee"; + size = <0x0 0x800000>; + mask = <0x1>; + linux,phandle = <0x2f>; + phandle = <0x2f>; + }; + + crypt { + pname = "crypt"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x30>; + phandle = <0x30>; + }; + + misc { + pname = "misc"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x31>; + phandle = <0x31>; + }; + + boot { + pname = "boot"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x32>; + phandle = <0x32>; + }; + + system { + pname = "system"; + size = <0x0 0x80000000>; + mask = <0x1>; + linux,phandle = <0x33>; + phandle = <0x33>; + }; + + cache { + pname = "cache"; + size = <0x0 0x20000000>; + mask = <0x2>; + linux,phandle = <0x34>; + phandle = <0x34>; + }; + + data { + pname = "data"; + size = <0x0 0xffffffff>; + mask = <0x4>; + linux,phandle = <0x35>; + phandle = <0x35>; + }; + + rootfs { + pname = "rootfs"; + size = <0xffffffff 0xffffffff>; + mask = <0x4>; + linux,phandle = <0x36>; + phandle = <0x36>; + }; + }; + + aliases { + serial0 = "/serial@c81004c0"; + serial1 = "/serial@c11084c0"; + serial2 = "/serial@c11084dc"; + serial3 = "/serial@c1108700"; + serial4 = "/serial@c81004e0"; + }; + + memory@00000000 { + device_type = "memory"; + linux,usable-memory-2g = <0x0 0x100000 0x0 0x7ff00000>; + linux,usable-memory-3g = <0x0 0x100000 0x0 0xbff00000>; + }; + + reserved-memory { + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + linux,secmon { + compatible = "amlogic, aml_secmon_memory"; + reg = <0x0 0x10000000 0x0 0x200000>; + no-map; + linux,phandle = <0x18>; + phandle = <0x18>; + }; + + linux,secos { + status = "disable"; + compatible = "amlogic, aml_secos_memory"; + reg = <0x0 0x5300000 0x0 0x2000000>; + no-map; + }; + + aml_pstore { + compatible = "amlogic, pstore"; + reg = <0x0 0x7300000 0x0 0x100000>; + no-map; + }; + + linux,di { + compatible = "amlogic, di-mem"; + size = <0x0 0x1e00000>; + linux,phandle = <0x3f>; + phandle = <0x3f>; + }; + + linux,ion-dev { + compatible = "amlogic, idev-mem"; + size = <0x0 0x4000000>; + linux,phandle = <0x3c>; + phandle = <0x3c>; + }; + + linux,vdin1_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x1000000>; + alignment = <0x0 0x400000>; + linux,phandle = <0x40>; + phandle = <0x40>; + }; + + linux,ppmgr { + compatible = "shared-dma-pool"; + size = <0x0 0x0>; + linux,phandle = <0x3e>; + phandle = <0x3e>; + }; + + linux,codec_mm_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0xc000000>; + alignment = <0x0 0x400000>; + linux,contiguous-region; + linux,phandle = <0x39>; + phandle = <0x39>; + }; + + linux,picdec { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x0>; + alignment = <0x0 0x0>; + linux,contiguous-region; + linux,phandle = <0x3d>; + phandle = <0x3d>; + }; + + linux,codec_mm_reserved { + compatible = "amlogic, codec-mm-reserved"; + size = <0x0 0x4100000>; + alignment = <0x0 0x100000>; + linux,phandle = <0x3a>; + phandle = <0x3a>; + }; + }; + + sysled { + compatible = "amlogic, sysled"; + dev_name = "sysled"; + status = "okay"; + led_gpio = <0x37 0x9 0x0>; + led_active_low = <0x1>; + }; + + fan { + compatible = "fanctl"; + fan_ctl0 = <0x38 0x3f 0x0>; + fan_ctl1 = <0x38 0x40 0x0>; + trig_temp_level0 = <0x32>; + trig_temp_level1 = <0x3c>; + trig_temp_level2 = <0x46>; + }; + + meson-vout { + compatible = "amlogic, meson-vout"; + dev_name = "meson-vout"; + status = "okay"; + }; + + meson-fb { + compatible = "amlogic, meson-fb"; + dev_name = "meson-fb"; + status = "okay"; + interrupts = <0x0 0x3 0x1 0x0 0x59 0x1>; + interrupt-names = "viu-vsync", "rdma"; + mem_size = <0x1851000 0x100000>; + display_mode_default = "1080p60hz"; + scale_mode = <0x1>; + display_size_default = <0x780 0x438 0x780 0xca8 0x20>; + logo_addr_2g = "0x7d851000"; + logo_addr_3g = "0xbd851000"; + }; + + ge2d { + compatible = "amlogic, ge2d"; + dev_name = "ge2d"; + status = "okay"; + interrupts = <0x0 0x96 0x1>; + interrupt-names = "ge2d"; + clocks = <0x6 0x17 0x6 0x19>; + clock-names = "clk_vapb_0", "clk_ge2d"; + resets = <0x6 0x34>; + reset-names = "ge2d"; + }; + + codec_io { + compatible = "amlogic, codec_io"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_cbus_base { + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + + io_dos_base { + reg = <0x0 0xc8820000 0x0 0x10000>; + }; + + io_hiubus_base { + reg = <0x0 0xc883c000 0x0 0x2000>; + }; + + io_aobus_base { + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + + io_vcbus_base { + reg = <0x0 0xd0100000 0x0 0x40000>; + }; + + io_dmc_base { + reg = <0x0 0xc8838000 0x0 0x400>; + }; + }; + + codec_mm { + compatible = "amlogic, codec, mm"; + memory-region = <0x39 0x3a>; + dev_name = "codec_mm"; + status = "okay"; + }; + + ethernet@0xc9410000 { + compatible = "amlogic, gxbb-rgmii-dwmac"; + reg = <0x0 0xc9410000 0x0 0x10000 0x0 0xc8834540 0x0 0x8 0x0 0xc8834558 0x0 0xc>; + interrupts = <0x0 0x8 0x1>; + phy-mode = "rgmii"; + pinctrl-names = "external_eth_pins"; + pinctrl-0 = <0x3b>; + rst_pin-gpios = <0x38 0xe 0x0>; + GPIOZ4_pin-gpios = <0x38 0x4 0x0>; + GPIOZ5_pin-gpios = <0x38 0x5 0x0>; + mc_val = <0x1621>; + cali_val = <0x20000>; + resets = <0x6 0x23>; + reset-names = "ethpower"; + interrupt-names = "macirq"; + clocks = <0x6 0xa>; + clock-names = "ethclk81"; + internal_phy = <0x0>; + }; + + mesonstream { + compatible = "amlogic, codec, streambuf"; + dev_name = "mesonstream"; + status = "okay"; + resets = <0x6 0x39 0x6 0x59 0x6 0x24 0x6 0x1>; + reset-names = "parser_top", "vpu_intr", "demux", "vdec"; + }; + + amvideocap { + compatible = "amlogic, amvideocap"; + dev_name = "amvideocap.0"; + status = "okay"; + max_size = <0x8>; + }; + + ion_dev { + compatible = "amlogic, ion_dev"; + memory-region = <0x3c>; + }; + + vdec { + compatible = "amlogic, vdec"; + dev_name = "vdec.0"; + status = "okay"; + interrupts = <0x0 0x3 0x1 0x0 0x17 0x1 0x0 0x20 0x1 0x0 0x2b 0x1 0x0 0x2c 0x1 0x0 0x2d 0x1>; + interrupt-names = "vsync", "demux", "parser", "mailbox_0", "mailbox_1", "mailbox_2"; + }; + + picdec { + compatible = "amlogic, picdec"; + memory-region = <0x3d>; + dev_name = "picdec"; + status = "okay"; + }; + + ppmgr { + compatible = "amlogic, ppmgr"; + memory-region = <0x3e>; + dev_name = "ppmgr"; + status = "okay"; + }; + + deinterlace { + compatible = "amlogic, deinterlace"; + status = "okay"; + memory-region = <0x3f>; + interrupts = <0x0 0x2e 0x1 0x0 0x6 0x1>; + interrupt-names = "de_irq", "timerc"; + buffer-size = <0x2fd000>; + hw-version = <0x2>; + }; + + vdin0 { + compatible = "amlogic, vdin"; + dev_name = "vdin0"; + status = "ok"; + reserve-iomap = "true"; + flag_cma = <0x1>; + cma_size = <0x10>; + interrupts = <0x0 0x53 0x1>; + rdma-irq = <0x2>; + clocks = <0x6 0x11 0x6 0x29>; + clock-names = "fclk_div5", "cts_vdin_meas_clk"; + vdin_id = <0x0>; + tv_bit_mode = <0x1>; + }; + + vdin1 { + compatible = "amlogic, vdin"; + memory-region = <0x40>; + dev_name = "vdin1"; + status = "ok"; + reserve-iomap = "true"; + flag_cma = <0x0>; + interrupts = <0x0 0x55 0x1>; + rdma-irq = <0x4>; + clocks = <0x6 0x11 0x6 0x29>; + clock-names = "fclk_div5", "cts_vdin_meas_clk"; + vdin_id = <0x1>; + tv_bit_mode = <0x1>; + }; + + amvdec_656in0 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in0"; + status = "ok"; + reg = <0x0 0xd0048000 0x0 0x7c>; + clocks = <0x6 0x7 0x6 0x26>; + clock-names = "fclk_div2", "cts_bt656_clk0"; + bt656_id = <0x0>; + }; + + amvdec_656in1 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in1"; + status = "ok"; + reg = <0x0 0xd0050000 0x0 0x7c>; + clocks = <0x6 0x7 0x6 0x27>; + clock-names = "fclk_div2", "cts_bt656_clk1"; + bt656_id = <0x1>; + }; + + amlvecm { + compatible = "amlogic, vecm"; + dev_name = "aml_vecm"; + status = "okay"; + gamma_en = <0x0>; + wb_en = <0x0>; + cm_en = <0x0>; + }; + + amvenc_avc { + compatible = "amlogic, amvenc_avc"; + dev_name = "amvenc_avc"; + status = "okay"; + interrupts = <0x0 0x2d 0x1>; + interrupt-names = "mailbox_2"; + }; + + hevc_enc { + compatible = "cnm, HevcEnc"; + dev_name = "HevcEnc"; + status = "okay"; + interrupts = <0x0 0xbb 0x1>; + interrupt-names = "wave420l_irq"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_reg_base { + reg = <0x0 0xc8810000 0x0 0x4000>; + }; + }; + + vpu { + compatible = "amlogic, vpu"; + dev_name = "vpu"; + status = "ok"; + clk_level = <0x7>; + }; + + bt-dev { + compatible = "amlogic, bt-dev"; + dev_name = "bt-dev"; + status = "okay"; + gpio_reset = <0x38 0x60 0x0>; + }; + + rtc { + compatible = "amlogic, aml_vrtc"; + alarm_reg_addr = <0xc81000a8>; + timer_e_addr = <0xc1109988>; + init_date = "2015/01/01"; + status = "okay"; + }; + + wifi { + compatible = "amlogic, aml_wifi"; + dev_name = "aml_wifi"; + status = "okay"; + interrupt_pin = <0x38 0x56 0x0>; + interrupts = <0x0 0x44 0x4>; + irq_trigger_type = "GPIO_IRQ_LOW"; + power_on_pin = <0x38 0x55 0x0>; + dhd_static_buf; + pinctrl-names = "wifi_32k_pins"; + pinctrl-0 = <0x41>; + pwm_config = <0x42>; + }; + + wifi_pwm_conf { + pwm_channel1 = <0x4>; + pwm_channel2 = <0xc>; + pwm_channel1_conf = <0x774d 0x3ba6 0x6>; + pwm_channel2_conf = <0x7736 0x3b9b 0x9>; + linux,phandle = <0x42>; + phandle = <0x42>; + }; + + emmc { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0074000 0x0 0x2000>; + interrupts = <0x0 0xda 0x1>; + pinctrl-names = "emmc_clk_cmd_pins", "emmc_all_pins"; + pinctrl-0 = <0x43>; + pinctrl-1 = <0x44 0x45 0x46>; + + emmc { + status = "disabled"; + pinname = "emmc"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_8_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_1_8V_DDR", "MMC_CAP_HW_RESET", "MMC_CAP_ERASE", "MMC_CAP_CMD23"; + caps2 = "MMC_CAP2_HS200", "MMC_CAP2_HS400"; + f_min = <0x493e0>; + f_max = <0x5f5e100>; + max_req_size = <0x20000>; + gpio_dat3 = <0x38 0x1d 0x0>; + hw_reset = <0x38 0x23 0x0>; + card_type = <0x1>; + }; + }; + + sd { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0072000 0x0 0x2000>; + interrupts = <0x0 0xd9 0x1 0x0 0x43 0x1 0x0 0x45 0x1>; + pinctrl-names = "sd_clk_cmd_pins", "sd_all_pins", "sd_1bit_pins", "sd_clk_cmd_uart_pins", "sd_1bit_uart_pins", "sd_to_ao_uart_pins", "ao_to_sd_uart_pins", "ao_to_sd_jtag_pins", "sd_to_ao_jtag_pins"; + pinctrl-0 = <0x47>; + pinctrl-1 = <0x48>; + pinctrl-2 = <0x49>; + pinctrl-3 = <0x4a>; + pinctrl-4 = <0x4b>; + pinctrl-5 = <0x4c>; + pinctrl-6 = <0x4d>; + pinctrl-7 = <0x4e>; + pinctrl-8 = <0x4f>; + + sd { + status = "okay"; + pinname = "sd"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_4_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED"; + f_min = <0x61a80>; + f_max = <0x5f5e100>; + max_req_size = <0x20000>; + gpio_dat3 = <0x38 0x2e 0x0>; + jtag_pin = <0x38 0x2a 0x0>; + gpio_cd = <0x38 0x30 0x0>; + card_in_delay = <0x190>; + irq_in = <0x3>; + irq_out = <0x5>; + card_type = <0x5>; + }; + }; + + sdio { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0070000 0x0 0x2000>; + interrupts = <0x0 0xd8 0x1>; + pinctrl-names = "sdio_clk_cmd_pins", "sdio_all_pins"; + pinctrl-0 = <0x50>; + pinctrl-1 = <0x51>; + + sdio { + status = "okay"; + pinname = "sdio"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_4_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_UHS_SDR12", "MMC_CAP_UHS_SDR25", "MMC_CAP_UHS_SDR50", "MMC_CAP_UHS_SDR104", "MMC_PM_KEEP_POWER"; + f_min = <0x61a80>; + f_max = <0xbebc200>; + max_req_size = <0x20000>; + card_type = <0x3>; + }; + }; + + nand { + compatible = "amlogic, aml_nand"; + dev_name = "nand"; + status = "disabled"; + reg = <0x0 0xd0074800 0x0 0x200>; + interrupts = <0x0 0x22 0x1>; + pinctrl-names = "nand_rb_mod", "nand_norb_mod", "nand_cs_pins_only"; + pinctrl-0 = <0x52 0x53 0x54>; + pinctrl-1 = <0x52 0x53 0x54>; + pinctrl-2 = <0x55>; + device_id = <0x0>; + plat-names = "nandnormal"; + plat-num = <0x1>; + plat-part-0 = <0x56>; + + normal { + enable_pad = "ce0", "ce1", "ce2", "ce3"; + busy_pad = "rb0"; + linux,phandle = <0x56>; + phandle = <0x56>; + }; + }; + + aml_nftl { + compatible = "amlogic, nftl"; + }; + + unifykey { + compatible = "amlogic, unifykey"; + status = "ok"; + unifykey-num = <0xe>; + unifykey-index-0 = <0x57>; + unifykey-index-1 = <0x58>; + unifykey-index-2 = <0x59>; + unifykey-index-3 = <0x5a>; + unifykey-index-4 = <0x5b>; + unifykey-index-5 = <0x5c>; + unifykey-index-6 = <0x5d>; + unifykey-index-7 = <0x5e>; + unifykey-index-8 = <0x5f>; + unifykey-index-9 = <0x60>; + unifykey-index-10 = <0x61>; + unifykey-index-11 = <0x62>; + unifykey-index-12 = <0x63>; + unifykey-index-13 = <0x64>; + + key_0 { + key-name = "usid"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x57>; + phandle = <0x57>; + }; + + key_1 { + key-name = "mac"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x58>; + phandle = <0x58>; + }; + + key_2 { + key-name = "hdcp"; + key-device = "secure"; + key-type = "sha1"; + key-permit = "read", "write", "del"; + linux,phandle = <0x59>; + phandle = <0x59>; + }; + + key_3 { + key-name = "secure_boot_set"; + key-device = "efuse"; + key-permit = "write"; + linux,phandle = <0x5a>; + phandle = <0x5a>; + }; + + key_4 { + key-name = "mac_bt"; + key-device = "normal"; + key-permit = "read", "write", "del"; + key-type = "mac"; + linux,phandle = <0x5b>; + phandle = <0x5b>; + }; + + key_5 { + key-name = "mac_wifi"; + key-device = "normal"; + key-permit = "read", "write", "del"; + key-type = "mac"; + linux,phandle = <0x5c>; + phandle = <0x5c>; + }; + + key_6 { + key-name = "hdcp2_tx"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5d>; + phandle = <0x5d>; + }; + + key_7 { + key-name = "hdcp2_rx"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5e>; + phandle = <0x5e>; + }; + + key_8 { + key-name = "widevinekeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5f>; + phandle = <0x5f>; + }; + + key_9 { + key-name = "deviceid"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x60>; + phandle = <0x60>; + }; + + key_10 { + key-name = "hdcp22_fw_private"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x61>; + phandle = <0x61>; + }; + + key_11 { + key-name = "PlayReadykeybox25"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x62>; + phandle = <0x62>; + }; + + key_12 { + key-name = "prpubkeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x63>; + phandle = <0x63>; + }; + + key_13 { + key-name = "prprivkeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x64>; + phandle = <0x64>; + }; + }; + + amhdmitx { + compatible = "amlogic, amhdmitx"; + dev_name = "amhdmitx"; + status = "okay"; + pinctrl-names = "hdmitx_hpd", "hdmitx_ddc"; + pinctrl-0 = <0x65>; + pinctrl-1 = <0x66>; + interrupts = <0x0 0x39 0x1>; + interrupt-names = "hdmitx_hpd"; + clocks = <0x6 0xb 0x6 0xc 0x6 0xd 0x6 0xe 0x6 0xf 0x6 0x16>; + clock-names = "hdmitx_clk_sys", "hdmitx_clk_encp", "hdmitx_clk_enci", "hdmitx_clk_pixel", "hdmitx_clk_phy", "hdmitx_clk_vid"; + gpio_i2c_en = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + }; + + aocec { + compatible = "amlogic, amlogic-aocec"; + device_name = "aocec"; + status = "okay"; + vendor_name = "Amlogic"; + vendor_id = <0x0>; + product_desc = "GXBB Mbox"; + cec_osd_string = "MBox"; + port_num = <0x1>; + arc_port_mask = <0x0>; + interrupts = <0x0 0xc7 0x1>; + interrupt-names = "hdmi_aocec"; + pinctrl-names = "hdmitx_aocec"; + pinctrl-0 = <0x67>; + reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + }; + + tvout { + compatible = "amlogic, tvout"; + dev_name = "tvout"; + status = "okay"; + }; + + i2c_gpio { + compatible = "i2c-gpio"; + status = "okay"; + dev_name = "i2c-gpio"; + i2c-gpio,delay-us = <0xa>; + gpios = <0x38 0x11 0x0 0x38 0x12 0x0>; + #address-cells = <0x2>; + #size-cells = <0x2>; + i2c-gpio,timeout-ms = <0xa>; + + i2c_gpio_edid { + compatible = "i2c-gpio-edid"; + reg = <0x50 0x0 0x0 0x0>; + }; + }; + + serial@c81004c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004c0 0x0 0x18>; + interrupts = <0x0 0xc1 0x1>; + status = "okay"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + xtal_tick_en = <0x1>; + fifosize = <0x40>; + pinctrl-names = "default"; + support-sysrq = <0x0>; + }; + + serial@c11084c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084c0 0x0 0x18>; + interrupts = <0x0 0x1a 0x1>; + status = "okay"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x80>; + pinctrl-names = "default"; + pinctrl-0 = <0x68>; + resets = <0x6 0xd>; + }; + + serial@c11084dc { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084dc 0x0 0x18>; + interrupts = <0x0 0x4b 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x69>; + resets = <0x6 0x30>; + }; + + serial@c1108700 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc1108700 0x0 0x18>; + interrupts = <0x0 0x5d 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x6a>; + resets = <0x6 0x4f>; + }; + + serial@c81004e0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004e0 0x0 0x18>; + interrupts = <0x0 0xc5 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x6b>; + }; + + canvas { + compatible = "amlogic, meson, canvas"; + dev_name = "amlogic-canvas"; + status = "ok"; + reg = <0x0 0xc8838000 0x0 0x400>; + }; + + rdma { + compatible = "amlogic, meson, rdma"; + dev_name = "amlogic-rdma"; + status = "ok"; + interrupts = <0x0 0x59 0x1>; + interrupt-names = "rdma"; + }; + + dwc3@c9000000 { + compatible = "synopsys, dwc3"; + reg = <0x0 0xc9000000 0x0 0x100000>; + interrupts = <0x0 0x1e 0x4>; + usb-phy = <0x6c 0x6d>; + cpu-type = "gxl"; + clock-src = "usb3.0"; + }; + + usb2phy@d0078000 { + compatible = "amlogic, amlogic-new-usb2"; + portnum = <0x3>; + reg = <0x0 0xd0078000 0x0 0x80>; + linux,phandle = <0x6c>; + phandle = <0x6c>; + }; + + usb3phy@d0078080 { + compatible = "amlogic, amlogic-new-usb3"; + portnum = <0x0>; + reg = <0x0 0xd0078080 0x0 0x20>; + interrupts = <0x0 0x10 0x4>; + otg = <0x1>; + gpio-vbus-power = "GPIOAO_5"; + gpios = <0x37 0x5 0x0>; + linux,phandle = <0x6d>; + phandle = <0x6d>; + }; + + dwc2_a { + compatible = "amlogic,dwc2"; + device_name = "dwc2_a"; + reg = <0x0 0xc9100000 0x0 0x40000>; + status = "okay"; + interrupts = <0x0 0x1f 0x4>; + pl-periph-id = <0x0>; + clock-src = "usb0"; + port-id = <0x0>; + port-type = <0x2>; + port-speed = <0x0>; + port-config = <0x0>; + port-dma = <0x0>; + port-id-mode = <0x0>; + usb-fifo = <0x2d8>; + cpu-type = "gxl"; + controller-type = <0x2>; + phy-reg = <0xd0078000>; + phy-reg-size = <0xa0>; + resets = <0x6 0x3a 0x6 0x48 0x6 0x36>; + reset-names = "usb_general", "usb1", "usb1_to_ddr"; + }; + + I2S { + #sound-dai-cells = <0x0>; + resets = <0x6 0x26 0x6 0x12 0x6 0x28 0x6 0x29 0x6 0x2a 0x6 0x2b 0x6 0x2c 0x6 0x2d 0x6 0x2f 0x6 0x8e 0x6 0x22>; + reset-names = "top_glue", "aud_buf", "i2s_out", "amclk_measure", "aififo2", "aud_mixer", "mixer_reg", "adc", "top_level", "aoclk", "aud_in"; + clocks = <0x6 0x21 0x6 0x22>; + clock-names = "mpll2", "mclk"; + compatible = "amlogic, aml-i2s-dai"; + linux,phandle = <0x79>; + phandle = <0x79>; + }; + + SPDIF { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-spdif-dai"; + resets = <0x6 0x27 0x6 0x90>; + reset-names = "iec958", "iec958_amclk"; + clocks = <0x6 0x20 0x6 0x24 0x6 0x22 0x6 0x25 0x6 0xa>; + clock-names = "mpll1", "i958", "mclk", "spdif", "clk_81"; + linux,phandle = <0x7a>; + phandle = <0x7a>; + }; + + PCM { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-pcm-dai"; + pinctrl-names = "aml_audio_btpcm"; + pinctrl-0 = <0x6e>; + clocks = <0x6 0x1f 0x6 0x2a 0x6 0x2b>; + clock-names = "mpll0", "pcm_mclk", "pcm_sclk"; + pcm_mode = <0x1>; + linux,phandle = <0x7b>; + phandle = <0x7b>; + }; + + i2s_platform { + compatible = "amlogic, aml-i2s"; + interrupts = <0x0 0x1d 0x1>; + linux,phandle = <0x77>; + phandle = <0x77>; + }; + + pcm_platform { + compatible = "amlogic, aml-pcm"; + linux,phandle = <0x78>; + phandle = <0x78>; + }; + + spdif_codec { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-spdif-codec"; + pinctrl-names = "aml_audio_spdif"; + pinctrl-0 = <0x6f>; + linux,phandle = <0x7d>; + phandle = <0x7d>; + }; + + pcm_codec { + #sound-dai-cells = <0x0>; + compatible = "amlogic, pcm2BT-codec"; + linux,phandle = <0x7e>; + phandle = <0x7e>; + }; + + dummy { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml_dummy_codec"; + status = "disable"; + }; + + t9015 { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml_codec_T9015"; + reg = <0x0 0xc8832000 0x0 0x14>; + status = "okay"; + linux,phandle = <0x7c>; + phandle = <0x7c>; + }; + + aml_m8_snd { + compatible = "aml, aml_snd_m8"; + status = "okay"; + aml-sound-card,format = "i2s"; + aml_sound_card,name = "AML-M8AUDIO"; + aml,audio-routing = "Ext Spk", "LOUTL", "Ext Spk", "LOUTR"; + mute_gpio-gpios = <0x38 0x15 0x0>; + mute_inv; + hp_disable; + hp_paraments = <0x320 0x12c 0x0 0x5 0x1>; + pinctrl-names = "aml_snd_m8"; + pinctrl-0 = <0x70>; + cpu_list = <0x71 0x72 0x73>; + codec_list = <0x74 0x75 0x76>; + plat_list = <0x77 0x77 0x78>; + + cpudai0 { + sound-dai = <0x79>; + linux,phandle = <0x71>; + phandle = <0x71>; + }; + + cpudai1 { + sound-dai = <0x7a>; + linux,phandle = <0x72>; + phandle = <0x72>; + }; + + cpudai2 { + sound-dai = <0x7b>; + linux,phandle = <0x73>; + phandle = <0x73>; + }; + + codec0 { + sound-dai = <0x7c>; + linux,phandle = <0x74>; + phandle = <0x74>; + }; + + codec1 { + sound-dai = <0x7d>; + linux,phandle = <0x75>; + phandle = <0x75>; + }; + + codec2 { + sound-dai = <0x7e>; + linux,phandle = <0x76>; + phandle = <0x76>; + }; + }; + + gpio_keypad { + compatible = "amlogic, gpio_keypad"; + status = "okay"; + scan_period = <0x14>; + key_num = <0x1>; + key_name = "power"; + key_code = <0x74>; + key_pin = <0x37 0x2 0x0>; + irq_keyup = <0x6>; + irq_keydown = <0x7>; + }; + + adc_keypad { + compatible = "amlogic, adc_keypad"; + status = "okay"; + key_name = "home"; + key_num = <0x1>; + key_code = <0x66>; + key_chan = <0x0>; + key_val = <0xa>; + key_tolerance = <0x28>; + }; + + aml-sensor@0 { + compatible = "amlogic, aml-thermal"; + device_name = "thermal"; + #thermal-sensor-cells = <0x1>; + linux,phandle = <0x7f>; + phandle = <0x7f>; + + cooling_devices { + + cpufreq_cool_cluster0 { + min_state = <0xf4240>; + dyn_coeff = <0x8c>; + cluster_id = <0x0>; + node_name = "cluster0"; + device_type = "cpufreq"; + }; + + cpufreq_cool_cluster1 { + min_state = <0x7a120>; + dyn_coeff = <0x8c>; + cluster_id = <0x1>; + node_name = "cluster1"; + device_type = "cpufreq"; + }; + + cpucore_cool_cluster0 { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x0>; + node_name = "cpu_core_cluster0"; + device_type = "cpucore"; + }; + + cpucore_cool_cluster1 { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x1>; + node_name = "cpu_core_cluster1"; + device_type = "cpucore"; + }; + + gpufreq_cool { + min_state = <0x190>; + dyn_coeff = <0x1b5>; + cluster_id = <0x0>; + node_name = "t82x"; + device_type = "gpufreq"; + }; + + gpucore_cool { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x0>; + node_name = "thermal_gpu_cores"; + device_type = "gpucore"; + }; + }; + + cpu_core_cluster0 { + #cooling-cells = <0x2>; + linux,phandle = <0x83>; + phandle = <0x83>; + }; + + cpu_core_cluster1 { + #cooling-cells = <0x2>; + linux,phandle = <0x84>; + phandle = <0x84>; + }; + + thermal_gpu_cores { + #cooling-cells = <0x2>; + linux,phandle = <0x86>; + phandle = <0x86>; + }; + }; + + thermal-zones { + + soc_thermal { + polling-delay = <0x3e8>; + polling-delay-passive = <0x64>; + sustainable-power = <0x992>; + thermal-sensors = <0x7f 0x3>; + + trips { + + trip-point@0 { + temperature = <0x11170>; + hysteresis = <0x3e8>; + type = "passive"; + }; + + trip-point@1 { + temperature = <0x13880>; + hysteresis = <0x3e8>; + type = "passive"; + linux,phandle = <0x80>; + phandle = <0x80>; + }; + + trip-point@2 { + temperature = <0x14c08>; + hysteresis = <0x1388>; + type = "hot"; + }; + + trip-point@3 { + temperature = <0x3f7a0>; + hysteresis = <0x3e8>; + type = "critical"; + }; + }; + + cooling-maps { + + cpufreq_cooling_map0 { + trip = <0x80>; + cooling-device = <0x81 0x0 0x4>; + contribution = <0x400>; + }; + + cpufreq_cooling_map1 { + trip = <0x80>; + cooling-device = <0x82 0x0 0x4>; + contribution = <0x400>; + }; + + cpucore_cooling_map0 { + trip = <0x80>; + cooling-device = <0x83 0x0 0x3>; + contribution = <0x400>; + }; + + cpucore_cooling_map1 { + trip = <0x80>; + cooling-device = <0x84 0x0 0x3>; + contribution = <0x400>; + }; + + gpufreq_cooling_map { + trip = <0x80>; + cooling-device = <0x85 0x0 0x4>; + contribution = <0x400>; + }; + + gpucore_cooling_map { + trip = <0x80>; + cooling-device = <0x86 0x0 0x2>; + contribution = <0x400>; + }; + }; + }; + }; +}; diff --git a/arch/arm64/boot/dts/kvim2_libreelec.dts b/arch/arm64/boot/dts/kvim2_libreelec.dts new file mode 100644 index 0000000000000..776ec83efe78d --- /dev/null +++ b/arch/arm64/boot/dts/kvim2_libreelec.dts @@ -0,0 +1,2415 @@ +/dts-v1/; + +/ { + model = "Amlogic"; + compatible = "amlogic, Gxm"; + amlogic-dt-id = "kvim"; + interrupt-parent = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + + t82x@d00c0000 { + compatible = "arm,malit602", "arm,malit60x", "arm,malit6xx", "arm,mali-midgard"; + #cooling-cells = <0x2>; + reg = <0x0 0xd00c0000 0x0 0x100000 0x0 0xc1104440 0x0 0x1000 0x0 0xc8100000 0x0 0x1000 0x0 0xc883c000 0x0 0x1000 0x0 0xc1104440 0x0 0x1000>; + interrupt-parent = <0x1>; + interrupts = <0x0 0xa0 0x4 0x0 0xa1 0x4 0x0 0xa2 0x4>; + interrupt-names = "GPU", "MMU", "JOB"; + num_of_pp = <0x3>; + sc_mpp = <0x1>; + operating-points = <0xa2c2a 0xf4240 0x7a120 0xf4240 0x61a80 0xf4240 0x45c12 0xf4240 0x3d090 0xf4240 0x1e848 0xf4240>; + tbl = <0x2 0x3 0x4 0x5 0x5>; + clocks = <0x6 0x8 0x6 0x9 0x6 0x11 0x6 0x12 0x6 0x1e 0x6 0x15 0x6 0x13 0x6 0x14>; + clock-names = "fclk_div3", "fclk_div4", "fclk_div5", "fclk_div7", "gp0_pll", "clk_gpu", "clk_gpu_0", "clk_gpu_1"; + linux,phandle = <0x80>; + phandle = <0x80>; + + clk125_cfg { + clk_freq = <0x7735940>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x1e 0x78>; + }; + + dvfs250_cfg { + clk_freq = <0xee6b280>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x50 0xaa>; + }; + + dvfs285_cfg { + clk_freq = <0x1107a650>; + clk_parent = "fclk_div7"; + clkp_freq = <0x1107a650>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x64 0xbe>; + linux,phandle = <0x2>; + phandle = <0x2>; + }; + + dvfs400_cfg { + clk_freq = <0x17d78400>; + clk_parent = "fclk_div5"; + clkp_freq = <0x17d78400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x98 0xcf>; + linux,phandle = <0x3>; + phandle = <0x3>; + }; + + dvfs500_cfg { + clk_freq = <0x1dcd6500>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xb4 0xdc>; + linux,phandle = <0x4>; + phandle = <0x4>; + }; + + dvfs666_cfg { + clk_freq = <0x27b25a80>; + clk_parent = "fclk_div3"; + clkp_freq = <0x27b25a80>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xd2 0xec>; + linux,phandle = <0x5>; + phandle = <0x5>; + }; + + dvfs800_cfg { + clk_freq = <0x2f34f600>; + clk_parent = "gp0_pll"; + clkp_freq = <0x2f34f600>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xe6 0xff>; + }; + }; + + gpu_clk@c883c00 { + compatible = "meson, gpu-clkgen-1.00.a"; + #clock-cells = <0x0>; + reg = <0x0 0xc883c000 0x0 0x1000>; + clocks = <0x6 0x8 0x6 0x9 0x6 0x11 0x6 0x12 0x6 0x1e 0x6 0x15 0x6 0x13 0x6 0x14>; + clock-names = "fclk_div3", "fclk_div4", "fclk_div5", "fclk_div7", "gp0_pll", "clk_gpu", "clk_gpu_0", "clk_gpu_1"; + clock-output-names = "clk_mali"; + tbl = <0x7 0x8 0x9 0xa 0xb 0xc>; + + clk125_cfg { + clk_freq = <0x7735940>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x1e 0x78>; + linux,phandle = <0x7>; + phandle = <0x7>; + }; + + clk250_cfg { + clk_freq = <0xee6b280>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x50 0xaa>; + linux,phandle = <0x8>; + phandle = <0x8>; + }; + + clk285_cfg { + clk_freq = <0x1107a650>; + clk_parent = "fclk_div7"; + clkp_freq = <0x1107a650>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x64 0xbe>; + linux,phandle = <0x9>; + phandle = <0x9>; + }; + + clk400_cfg { + clk_freq = <0x17d78400>; + clk_parent = "fclk_div5"; + clkp_freq = <0x17d78400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x98 0xcf>; + linux,phandle = <0xa>; + phandle = <0xa>; + }; + + clk500_cfg { + clk_freq = <0x1dcd6500>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xb4 0xdc>; + linux,phandle = <0xb>; + phandle = <0xb>; + }; + + clk666_cfg { + clk_freq = <0x27bc8410>; + clk_parent = "fclk_div3"; + clkp_freq = <0x27bc8410>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xd2 0xec>; + linux,phandle = <0xc>; + phandle = <0xc>; + }; + + clk720_cfg { + clk_freq = <0x2aea5400>; + clk_parent = "gp0_pll"; + clkp_freq = <0x2aea5400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xe6 0xff>; + }; + }; + + cpus { + #address-cells = <0x2>; + #size-cells = <0x0>; + + cpu-map { + + cluster0 { + #cooling-cells = <0x2>; + linux,phandle = <0x7c>; + phandle = <0x7c>; + + core0 { + cpu = <0xd>; + }; + + core1 { + cpu = <0xe>; + }; + + core2 { + cpu = <0xf>; + }; + + core3 { + cpu = <0x10>; + }; + }; + + cluster1 { + #cooling-cells = <0x2>; + linux,phandle = <0x7d>; + phandle = <0x7d>; + + core0 { + cpu = <0x11>; + }; + + core1 { + cpu = <0x12>; + }; + + core2 { + cpu = <0x13>; + }; + + core3 { + cpu = <0x14>; + }; + }; + }; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xd>; + phandle = <0xd>; + }; + + cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xe>; + phandle = <0xe>; + }; + + cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xf>; + phandle = <0xf>; + }; + + cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x10>; + phandle = <0x10>; + }; + + cpu@100 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x100>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x11>; + phandle = <0x11>; + }; + + cpu@101 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x101>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x12>; + phandle = <0x12>; + }; + + cpu@102 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x102>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x13>; + phandle = <0x13>; + }; + + cpu@103 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x103>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x14>; + phandle = <0x14>; + }; + + idle-states { + entry-method = "arm,psci"; + + cpu-sleep-0 { + compatible = "arm, idle-state"; + arm,psci-suspend-param = <0x10000>; + local-timer-stop; + entry-latency-us = <0x1f40>; + exit-latency-us = <0x1f40>; + min-residency-us = <0x4e20>; + linux,phandle = <0x16>; + phandle = <0x16>; + }; + + cluster-sleep-0 { + compatible = "arm, idle-state"; + arm,psci-suspend-param = <0x1010000>; + local-timer-stop; + entry-latency-us = <0x1f40>; + exit-latency-us = <0x1f40>; + min-residency-us = <0x61a8>; + linux,phandle = <0x17>; + phandle = <0x17>; + }; + }; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x1 0xd 0xff01 0x1 0xe 0xff01 0x1 0xb 0xff01 0x1 0xa 0xff01>; + }; + + timer_bc { + compatible = "arm, meson-bc-timer"; + reg = <0x0 0xc1109990 0x0 0x4 0x0 0xc1109994 0x0 0x4>; + timer_name = "Meson TimerF"; + clockevent-rating = <0x12c>; + clockevent-shift = <0x14>; + clockevent-features = <0x23>; + interrupts = <0x0 0x3c 0x1>; + bit_enable = <0x10>; + bit_mode = <0xc>; + bit_resolution = <0x0>; + }; + + arm_pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0x0 0x89 0x4 0x0 0x8a 0x4 0x0 0x99 0x4 0x0 0x9a 0x4>; + }; + + pm { + compatible = "amlogic, pm"; + device_name = "aml_pm"; + gxbaby-suspend; + reg = <0x0 0xc81000a8 0x0 0x4 0x0 0xc810023c 0x0 0x4>; + }; + + interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <0x3>; + #address-cells = <0x0>; + interrupt-controller; + reg = <0x0 0xc4301000 0x0 0x1000 0x0 0xc4302000 0x0 0x100>; + interrupts = <0x1 0x9 0xf04>; + linux,phandle = <0x1>; + phandle = <0x1>; + }; + + aml_restart { + compatible = "aml, restart"; + sys_reset = <0x84000009>; + sys_poweroff = <0x84000008>; + }; + + psci { + compatible = "arm,psci"; + method = "smc"; + cpu_suspend = <0xc4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xc4000003>; + migrate = <0xc4000005>; + }; + + secmon { + compatible = "amlogic, secmon"; + memory-region = <0x18>; + in_base_func = <0x82000020>; + out_base_func = <0x82000021>; + }; + + securitykey { + compatible = "aml, securitykey"; + storage_query = <0x82000060>; + storage_read = <0x82000061>; + storage_write = <0x82000062>; + storage_tell = <0x82000063>; + storage_verify = <0x82000064>; + storage_status = <0x82000065>; + storage_list = <0x82000067>; + storage_remove = <0x82000068>; + storage_in_func = <0x82000023>; + storage_out_func = <0x82000024>; + storage_block_func = <0x82000025>; + storage_size_func = <0x82000027>; + storage_set_enctype = <0x8200006a>; + storage_get_enctype = <0x8200006b>; + storage_version = <0x8200006c>; + }; + + cpu_iomap { + compatible = "amlogic, iomap"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_cbus_base { + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + + io_apb_base { + reg = <0x0 0xd0000000 0x0 0x200000>; + }; + + io_aobus_base { + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + }; + + cpufreq { + compatible = "arm, scpi-cpufreq"; + }; + + amlogic-watchdog { + compatible = "amlogic, gx-wdt"; + status = "disable"; + default_timeout = <0xa>; + reset_watchdog_method = <0x1>; + reset_watchdog_time = <0x2>; + shutdown_timeout = <0xa>; + firmware_timeout = <0x6>; + suspend_timeout = <0x6>; + reg = <0x0 0xc11098d0 0x0 0x10>; + clocks = <0x6 0x2>; + }; + + amlogic-jtag { + compatible = "amlogic, jtag"; + status = "okay"; + pinctrl-names = "jtag_apao_pins", "jtag_apee_pins"; + pinctrl-0 = <0x19>; + pinctrl-1 = <0x1a>; + }; + + meson_clock { + compatible = "amlogic, gxl-clock"; + reg = <0x0 0xc883c000 0x0 0x1000 0x0 0xc8100000 0x0 0x1000>; + #clock-cells = <0x1>; + #reset-cells = <0x1>; + sys_max = <0x5b8d8000>; + linux,phandle = <0x6>; + phandle = <0x6>; + }; + + cpu_info { + compatible = "amlogic, cpuinfo"; + cpuinfo_cmd = <0x82000044>; + }; + + pinmux { + compatible = "amlogic, pinmux-gxl"; + dev_name = "pinmux"; + #pinmux-cells = <0x2>; + #address-cells = <0x2>; + #size-cells = <0x2>; + reg = <0x0 0xc1109880 0x0 0x10>; + ranges; + + banks@c11080b0 { + reg = <0x0 0xc88344b0 0x0 0x28 0x0 0xc88344e8 0x0 0x14 0x0 0xc8834520 0x0 0x14 0x0 0xc8834430 0x0 0x40>; + reg-names = "mux", "pull", "pull-enable", "gpio"; + gpio-controller; + #gpio-cells = <0x2>; + linux,phandle = <0x28>; + phandle = <0x28>; + }; + + ao-bank@c1108030 { + reg = <0x0 0xc8100014 0x0 0x8 0x0 0xc810002c 0x0 0x4 0x0 0xc8100024 0x0 0x8>; + reg-names = "mux", "pull", "gpio"; + gpio-controller; + #gpio-cells = <0x2>; + linux,phandle = <0x27>; + phandle = <0x27>; + }; + + external_eth_pins { + amlogic,setmask = <0x4 0xfffc00>; + amlogic,clrmask = <0x4 0x3fc 0x3 0xffcff800>; + amlogic,pins = "GPIOZ_0", "GPIOZ_1", "GPIOZ_2", "GPIOZ_3", "GPIOZ_4", "GPIOZ_5", "GPIOZ_6", "GPIOZ_7", "GPIOZ_8", "GPIOZ_9", "GPIOZ_10", "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + linux,phandle = <0x2b>; + phandle = <0x2b>; + }; + + internal_eth_pins { + amlogic,setmask = <0x4 0x3000000>; + amlogic,clrmask = <0x3 0x300000>; + amlogic,pins = "GPIOZ_14", "GPIOZ_15"; + }; + + jtag_apao_pin { + amlogic,clrmask = <0x6 0x7fe0000>; + amlogic,pins = "GPIOH_6", "GPIOH_7", "GPIOH_8", "GPIOH_9"; + linux,phandle = <0x19>; + phandle = <0x19>; + }; + + jtag_apee_pin { + amlogic,clrmask = <0x6 0x3c>; + amlogic,pins = "CARD_0", "CARD_1", "CARD_2", "CARD_3"; + linux,phandle = <0x1a>; + phandle = <0x1a>; + }; + + remote_pin { + amlogic,setmask = <0x10 0x1>; + amlogic,pins = "GPIOAO_7"; + linux,phandle = <0x26>; + phandle = <0x26>; + }; + + ao_uart { + amlogic,setmask = <0x10 0x1800>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + }; + + ao_b_uart { + amlogic,setmask = <0x10 0x1800000>; + amlogic,pins = "GPIOAO_4", "GPIOAO_5"; + linux,phandle = <0x66>; + phandle = <0x66>; + }; + + a_uart { + amlogic,setmask = <0x5 0xf0000>; + amlogic,clrmask = <0x5 0x3c0>; + amlogic,pins = "GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15"; + linux,phandle = <0x63>; + phandle = <0x63>; + }; + + b_uart { + amlogic,setmask = <0x2 0x18000>; + amlogic,pins = "GPIODV_24", "GPIODV_25"; + linux,phandle = <0x64>; + phandle = <0x64>; + }; + + c_uart { + amlogic,setmask = <0x5 0x3000>; + amlogic,pins = "GPIOX_8", "GPIOX_9"; + linux,phandle = <0x65>; + phandle = <0x65>; + }; + + wifi_32k_pins { + amlogic,setmask = <0x5 0x8000>; + amlogic,pins = "GPIOX_16"; + linux,phandle = <0x31>; + phandle = <0x31>; + }; + + sd_clk_cmd_pins { + amlogic,setmask = <0x6 0xc 0x10 0x1800>; + amlogic,pins = "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x37>; + phandle = <0x37>; + }; + + sd_all_pins { + amlogic,setmask = <0x6 0x3f 0x10 0x1800>; + amlogic,clrmask = <0x6 0xfc0>; + amlogic,pins = "CARD_0", "CARD_1", "CARD_2", "CARD_3", "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x38>; + phandle = <0x38>; + }; + + sd_1bit_pins { + amlogic,setmask = <0x6 0x1c 0x10 0x1800>; + amlogic,clrmask = <0x6 0xcc3>; + amlogic,pins = "CARD_1", "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x39>; + phandle = <0x39>; + }; + + sd_clk_cmd_uart_pins { + amlogic,setmask = <0x6 0x30c>; + amlogic,clrmask = <0x6 0xcc3 0x10 0x1800>; + amlogic,pins = "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x3a>; + phandle = <0x3a>; + }; + + sd_1bit_uart_pins { + amlogic,setmask = <0x6 0x31c>; + amlogic,clrmask = <0x6 0xcc3 0x10 0x1800>; + amlogic,pins = "CARD_1", "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x3b>; + phandle = <0x3b>; + }; + + sd_to_ao_uart_pins { + amlogic,setmask = <0x10 0x1800>; + amlogic,clrmask = <0x6 0x300>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x3c>; + phandle = <0x3c>; + }; + + ao_to_sd_uart_pins { + amlogic,setmask = <0x6 0x300>; + amlogic,clrmask = <0x10 0x1800 0x6 0xcc3>; + amlogic,pins = "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x3d>; + phandle = <0x3d>; + }; + + ao_to_sd_jtag_pins { + amlogic,setmask = <0x6 0x300>; + amlogic,clrmask = <0x6 0xcff 0x10 0x1800>; + amlogic,pins = "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x3e>; + phandle = <0x3e>; + }; + + sd_to_ao_jtag_pins { + amlogic,setmask = <0x10 0x1800>; + amlogic,clrmask = <0x6 0xfc0>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x3f>; + phandle = <0x3f>; + }; + + emmc_clk_cmd_pins { + amlogic,setmask = <0x7 0x60000000>; + amlogic,clrmask = <0x7 0xe0>; + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x33>; + phandle = <0x33>; + }; + + emmc_conf_pull_up { + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_10"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x34>; + phandle = <0x34>; + }; + + emmc_conf_pull_done { + amlogic,pins = "BOOT_15"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x35>; + phandle = <0x35>; + }; + + emmc_all_pins { + amlogic,setmask = <0x7 0xf0000000>; + amlogic,clrmask = <0x7 0xe0>; + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_10", "BOOT_15"; + amlogic,enable-output = <0x1>; + linux,phandle = <0x36>; + phandle = <0x36>; + }; + + sdio_clk_cmd_pins { + amlogic,setmask = <0x5 0xc000000>; + amlogic,pins = "GPIOX_4", "GPIOX_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x40>; + phandle = <0x40>; + }; + + sdio_all_pins { + amlogic,setmask = <0x5 0xfc000000>; + amlogic,pins = "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", "GPIOX_4", "GPIOX_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x41>; + phandle = <0x41>; + }; + + conf_nand_pulldown { + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_15"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x42>; + phandle = <0x42>; + }; + + conf_nand_pullup { + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x43>; + phandle = <0x43>; + }; + + all_nand_pins { + amlogic,setmask = <0x7 0x800000ff>; + amlogic,clrmask = <0x7 0x70ffbc00>; + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_9", "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14", "BOOT_15"; + amlogic,enable-output = <0x1>; + linux,phandle = <0x44>; + phandle = <0x44>; + }; + + nand_cs { + amlogic,setmask = <0x7 0xc0>; + amlogic,clrmask = <0x7 0x40040000>; + amlogic,pins = "BOOT_8", "BOOT_9"; + linux,phandle = <0x45>; + phandle = <0x45>; + }; + + hdmitx_hpd { + amlogic,setmask = <0x6 0x80000000>; + amlogic,pins = "GPIOH_0"; + linux,phandle = <0x60>; + phandle = <0x60>; + }; + + hdmitx_ddc { + amlogic,setmask = <0x6 0x30000000>; + amlogic,pins = "GPIOH_1", "GPIOH_2"; + linux,phandle = <0x61>; + phandle = <0x61>; + }; + + hdmitx_aocec { + amlogic,setmask = <0x10 0x8000>; + amlogic,clrmask = <0x10 0x24000 0x11 0x1>; + amlogic,pins = "GPIOAO_8"; + linux,phandle = <0x62>; + phandle = <0x62>; + }; + + hdmitx_eecec { + amlogic,setmask = <0x10 0x4000>; + amlogic,clrmask = <0x10 0x28000 0x11 0x1>; + amlogic,pins = "GPIOAO_8"; + }; + + ao_i2c { + amlogic,setmask = <0x10 0x60>; + amlogic,clrmask = <0x10 0x1800006>; + amlogic,pins = "GPIOAO_4", "GPIOAO_5"; + linux,phandle = <0x1b>; + phandle = <0x1b>; + }; + + a_i2c { + amlogic,setmask = <0x1 0xc000>; + amlogic,clrmask = <0x3 0x18 0x2 0x18000 0x2 0xc0 0x1 0x600000>; + amlogic,pins = "GPIODV_24", "GPIODV_25"; + linux,phandle = <0x1c>; + phandle = <0x1c>; + }; + + b_i2c { + amlogic,setmask = <0x1 0x3000>; + amlogic,clrmask = <0x2 0x6000 0x1 0x1c0000>; + amlogic,pins = "GPIODV_26", "GPIODV_27"; + linux,phandle = <0x1d>; + phandle = <0x1d>; + }; + + c_i2c { + amlogic,setmask = <0x1 0xc00>; + amlogic,clrmask = <0x2 0x1800 0x1 0x200 0x2 0x20>; + amlogic,pins = "GPIODV_28", "GPIODV_29"; + linux,phandle = <0x1e>; + phandle = <0x1e>; + }; + + c_i2c_pin1 { + amlogic,setmask = <0x1 0x30000>; + amlogic,clrmask = <0x1 0x2000000 0x3 0x20>; + amlogic,pins = "GPIODV_18", "GPIODV_19"; + }; + + d_i2c { + amlogic,setmask = <0x5 0x30>; + amlogic,clrmask = <0x5 0x300c03 0x6 0x3>; + amlogic,pins = "GPIOX_10", "GPIOX_11"; + linux,phandle = <0x1f>; + phandle = <0x1f>; + }; + + spicc_pins_z11z12z13 { + amlogic,setmask = <0x4 0x1c>; + amlogic,clrmask = <0x3 0x800 0x4 0x1c00>; + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + }; + + spicc_pulldown_z11z12z13 { + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + }; + + spicc_pullup_z11z12z13 { + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + }; + + spicc_pins_x8x9x11 { + amlogic,setmask = <0x5 0xd>; + amlogic,clrmask = <0x5 0xd03430 0x6 0xd>; + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + }; + + spicc_pulldown_x8x9x11 { + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + }; + + spicc_pullup_x8x9x11 { + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + }; + + audio_pin { + amlogic,setmask = <0x6 0x7800000>; + amlogic,clrmask = <0x6 0x7e0000>; + amlogic,pins = "GPIOH_6", "GPIOH_7", "GPIOH_8", "GPIOH_9"; + linux,phandle = <0x6b>; + phandle = <0x6b>; + }; + + audio_pin1 { + amlogic,setmask = <0x6 0x10000000>; + amlogic,clrmask = <0x6 0x8000000>; + amlogic,pins = "GPIOH_4"; + linux,phandle = <0x6a>; + phandle = <0x6a>; + }; + + audio_btpcm_pins { + amlogic,setmask = <0x5 0xf00000>; + amlogic,clrmask = <0x5 0x3c33>; + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11"; + linux,phandle = <0x69>; + phandle = <0x69>; + }; + }; + + cpu_version { + reg = <0x0 0xc8100220 0x0 0x4>; + }; + + meson_clk_msr { + compatible = "amlogic, gxl_measure"; + reg = <0x0 0xc110875c 0x0 0x4 0x0 0xc1108764 0x0 0x4>; + }; + + i2c@c8100500 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-AO"; + status = "disabled"; + reg = <0x0 0xc8100500 0x0 0x1d>; + device_id = <0x0>; + pinctrl-names = "default"; + pinctrl-0 = <0x1b>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c1108500 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-A"; + status = "disabled"; + reg = <0x0 0xc1108500 0x0 0x20>; + device_id = <0x1>; + pinctrl-names = "default"; + pinctrl-0 = <0x1c>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c11087c0 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-B"; + status = "okay"; + reg = <0x0 0xc11087c0 0x0 0x20>; + device_id = <0x2>; + pinctrl-names = "default"; + pinctrl-0 = <0x1d>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c11087e0 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-C"; + status = "disabled"; + reg = <0x0 0xc11087e0 0x0 0x20>; + device_id = <0x3>; + pinctrl-names = "default"; + pinctrl-0 = <0x1e>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c1108d20 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-D"; + status = "disabled"; + reg = <0x0 0xc1108d20 0x0 0x20>; + device_id = <0x4>; + pinctrl-names = "default"; + pinctrl-0 = <0x1f>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + efuse { + compatible = "amlogic, efuse"; + read_cmd = <0x82000030>; + write_cmd = <0x82000031>; + get_max_cmd = <0x82000033>; + key = <0x20>; + resets = <0x6 0x3e>; + reset-names = "efuse_clk"; + status = "ok"; + }; + + efusekey { + keynum = <0x4>; + key0 = <0x21>; + key1 = <0x22>; + key2 = <0x23>; + key3 = <0x24>; + linux,phandle = <0x20>; + phandle = <0x20>; + + key_0 { + keyname = "mac"; + offset = <0x0>; + size = <0x6>; + linux,phandle = <0x21>; + phandle = <0x21>; + }; + + key_1 { + keyname = "mac_bt"; + offset = <0x6>; + size = <0x6>; + linux,phandle = <0x22>; + phandle = <0x22>; + }; + + key_2 { + keyname = "mac_wifi"; + offset = <0xc>; + size = <0x6>; + linux,phandle = <0x23>; + phandle = <0x23>; + }; + + key_3 { + keyname = "usid"; + offset = <0x12>; + size = <0x10>; + linux,phandle = <0x24>; + phandle = <0x24>; + }; + }; + + mhu@c883c400 { + compatible = "amlogic, meson_mhu"; + reg = <0x0 0xc883c400 0x0 0x4c 0x0 0xc8013000 0x0 0x800>; + interrupts = <0x0 0xd1 0x8 0x0 0xd2 0x8>; + #mbox-cells = <0x1>; + mbox-names = "cpu_to_scp_low", "cpu_to_scp_high"; + mboxes = <0x25 0x0 0x25 0x1>; + linux,phandle = <0x25>; + phandle = <0x25>; + }; + + scpi_clocks { + compatible = "arm,scpi-clks"; + + scpi_clocks@0 { + compatible = "arm,scpi-clk-indexed"; + #clock-cells = <0x1>; + clock-indices = <0x0 0x1>; + clock-output-names = "vbig", "vlittle"; + linux,phandle = <0x15>; + phandle = <0x15>; + }; + }; + + meson-remote { + compatible = "amlogic, aml_remote"; + dev_name = "meson-remote"; + status = "okay"; + remote_ao_offset = <0x580>; + interrupts = <0x0 0xc4 0x1>; + pinctrl-names = "default"; + pinctrl-0 = <0x26>; + }; + + meson-ir { + compatible = "amlogic,meson-gxbb-ir"; + status = "disabled"; + reg = <0x0 0xc8100580 0x0 0x40>; + interrupts = <0x0 0xc4 0x1>; + pinctrl-names = "default"; + pinctrl-0 = <0x26>; + }; + + rng { + compatible = "amlogic,meson-rng"; + reg = <0x0 0xc8834000 0x0 0x4>; + }; + + audio_data { + compatible = "amlogic, audio_data"; + query_licence_cmd = <0x82000050>; + status = "okay"; + }; + + saradc { + compatible = "amlogic, saradc"; + status = "okay"; + interrupts = <0x0 0x9 0x1>; + interrupt-names = "saradc_int"; + clocks = <0x6 0x2>; + clock-names = "saradc_clk"; + resets = <0x6 0x56>; + reg = <0x0 0xc1108680 0x0 0x30 0x0 0xc883c3d8 0x0 0x8>; + }; + + defendkey { + compatible = "amlogic, defendkey"; + reg = <0x0 0xc8834500 0x0 0x4>; + mem_size = <0x0 0x100000>; + status = "okay"; + }; + + spicc { + compatible = "amlogic, spicc"; + status = "disabled"; + reg = <0x0 0xc1108d80 0x0 0x28>; + resets = <0x6 0x8>; + reset-names = "spicc_clk"; + clocks = <0x6 0xa>; + clock-names = "clk81"; + interrupts = <0x0 0x51 0x1>; + device_id = <0x0>; + }; + + aml_aes { + compatible = "amlogic,aes_dma"; + dev_name = "aml_aes_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aml_tdes { + compatible = "amlogic,des_dma,tdes_dma"; + dev_name = "aml_tdes_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aml_sha { + compatible = "amlogic,sha_dma"; + dev_name = "aml_sha_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aliases { + serial0 = "/serial@c81004c0"; + serial1 = "/serial@c11084c0"; + serial2 = "/serial@c11084dc"; + serial3 = "/serial@c1108700"; + serial4 = "/serial@c81004e0"; + }; + + memory@00000000 { + device_type = "memory"; + linux,usable-memory-2g = <0x0 0x100000 0x0 0x7ff00000>; + linux,usable-memory-3g = <0x0 0x100000 0x0 0xbff00000>; + }; + + reserved-memory { + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + linux,secmon { + compatible = "amlogic, aml_secmon_memory"; + reg = <0x0 0x10000000 0x0 0x200000>; + no-map; + linux,phandle = <0x18>; + phandle = <0x18>; + }; + + linux,secos { + status = "disable"; + compatible = "amlogic, aml_secos_memory"; + reg = <0x0 0x5300000 0x0 0x2000000>; + no-map; + }; + + aml_pstore { + compatible = "amlogic, pstore"; + reg = <0x0 0x7300000 0x0 0x100000>; + no-map; + }; + + linux,di { + compatible = "amlogic, di-mem"; + size = <0x0 0x1e00000>; + linux,phandle = <0x2f>; + phandle = <0x2f>; + }; + + linux,ion-dev { + compatible = "amlogic, idev-mem"; + size = <0x0 0x4000000>; + linux,phandle = <0x2c>; + phandle = <0x2c>; + }; + + linux,vdin1_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x1000000>; + alignment = <0x0 0x400000>; + linux,phandle = <0x30>; + phandle = <0x30>; + }; + + linux,ppmgr { + compatible = "shared-dma-pool"; + size = <0x0 0x0>; + linux,phandle = <0x2e>; + phandle = <0x2e>; + }; + + linux,codec_mm_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0xc000000>; + alignment = <0x0 0x400000>; + linux,contiguous-region; + linux,phandle = <0x29>; + phandle = <0x29>; + }; + + linux,picdec { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x0>; + alignment = <0x0 0x0>; + linux,contiguous-region; + linux,phandle = <0x2d>; + phandle = <0x2d>; + }; + + linux,codec_mm_reserved { + compatible = "amlogic, codec-mm-reserved"; + size = <0x0 0x4100000>; + alignment = <0x0 0x100000>; + linux,phandle = <0x2a>; + phandle = <0x2a>; + }; + }; + + sysled { + compatible = "amlogic, sysled"; + dev_name = "sysled"; + status = "okay"; + led_gpio = <0x27 0x9 0x0>; + led_active_low = <0x1>; + }; + + fan { + compatible = "fanctl"; + fan_ctl0 = <0x28 0x3f 0x0>; + fan_ctl1 = <0x28 0x40 0x0>; + trig_temp_level0 = <0x32>; + trig_temp_level1 = <0x3c>; + trig_temp_level2 = <0x46>; + }; + + meson-vout { + compatible = "amlogic, meson-vout"; + dev_name = "meson-vout"; + status = "okay"; + }; + + meson-fb { + compatible = "amlogic, meson-fb"; + dev_name = "meson-fb"; + status = "okay"; + interrupts = <0x0 0x3 0x1 0x0 0x59 0x1>; + interrupt-names = "viu-vsync", "rdma"; + mem_size = <0x1851000 0x100000>; + display_mode_default = "1080p60hz"; + scale_mode = <0x1>; + display_size_default = <0x780 0x438 0x780 0xca8 0x20>; + logo_addr_2g = "0x7d851000"; + logo_addr_3g = "0xbd851000"; + }; + + ge2d { + compatible = "amlogic, ge2d"; + dev_name = "ge2d"; + status = "okay"; + interrupts = <0x0 0x96 0x1>; + interrupt-names = "ge2d"; + clocks = <0x6 0x17 0x6 0x19>; + clock-names = "clk_vapb_0", "clk_ge2d"; + resets = <0x6 0x34>; + reset-names = "ge2d"; + }; + + codec_io { + compatible = "amlogic, codec_io"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_cbus_base { + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + + io_dos_base { + reg = <0x0 0xc8820000 0x0 0x10000>; + }; + + io_hiubus_base { + reg = <0x0 0xc883c000 0x0 0x2000>; + }; + + io_aobus_base { + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + + io_vcbus_base { + reg = <0x0 0xd0100000 0x0 0x40000>; + }; + + io_dmc_base { + reg = <0x0 0xc8838000 0x0 0x400>; + }; + }; + + codec_mm { + compatible = "amlogic, codec, mm"; + memory-region = <0x29 0x2a>; + dev_name = "codec_mm"; + status = "okay"; + }; + + ethernet@0xc9410000 { + compatible = "amlogic, gxbb-rgmii-dwmac"; + reg = <0x0 0xc9410000 0x0 0x10000 0x0 0xc8834540 0x0 0x8 0x0 0xc8834558 0x0 0xc>; + interrupts = <0x0 0x8 0x1>; + phy-mode = "rgmii"; + pinctrl-names = "external_eth_pins"; + pinctrl-0 = <0x2b>; + rst_pin-gpios = <0x28 0xe 0x0>; + GPIOZ4_pin-gpios = <0x28 0x4 0x0>; + GPIOZ5_pin-gpios = <0x28 0x5 0x0>; + mc_val = <0x1621>; + cali_val = <0x20000>; + resets = <0x6 0x23>; + reset-names = "ethpower"; + interrupt-names = "macirq"; + clocks = <0x6 0xa>; + clock-names = "ethclk81"; + internal_phy = <0x0>; + }; + + mesonstream { + compatible = "amlogic, codec, streambuf"; + dev_name = "mesonstream"; + status = "okay"; + resets = <0x6 0x39 0x6 0x59 0x6 0x24 0x6 0x1>; + reset-names = "parser_top", "vpu_intr", "demux", "vdec"; + }; + + amvideocap { + compatible = "amlogic, amvideocap"; + dev_name = "amvideocap.0"; + status = "okay"; + max_size = <0x8>; + }; + + ion_dev { + compatible = "amlogic, ion_dev"; + memory-region = <0x2c>; + }; + + vdec { + compatible = "amlogic, vdec"; + dev_name = "vdec.0"; + status = "okay"; + interrupts = <0x0 0x3 0x1 0x0 0x17 0x1 0x0 0x20 0x1 0x0 0x2b 0x1 0x0 0x2c 0x1 0x0 0x2d 0x1>; + interrupt-names = "vsync", "demux", "parser", "mailbox_0", "mailbox_1", "mailbox_2"; + }; + + picdec { + compatible = "amlogic, picdec"; + memory-region = <0x2d>; + dev_name = "picdec"; + status = "okay"; + }; + + ppmgr { + compatible = "amlogic, ppmgr"; + memory-region = <0x2e>; + dev_name = "ppmgr"; + status = "okay"; + }; + + deinterlace { + compatible = "amlogic, deinterlace"; + status = "okay"; + memory-region = <0x2f>; + interrupts = <0x0 0x2e 0x1 0x0 0x6 0x1>; + interrupt-names = "de_irq", "timerc"; + buffer-size = <0x2fd000>; + hw-version = <0x2>; + }; + + vdin0 { + compatible = "amlogic, vdin"; + dev_name = "vdin0"; + status = "ok"; + reserve-iomap = "true"; + flag_cma = <0x1>; + cma_size = <0x10>; + interrupts = <0x0 0x53 0x1>; + rdma-irq = <0x2>; + clocks = <0x6 0x11 0x6 0x29>; + clock-names = "fclk_div5", "cts_vdin_meas_clk"; + vdin_id = <0x0>; + tv_bit_mode = <0x1>; + }; + + vdin1 { + compatible = "amlogic, vdin"; + memory-region = <0x30>; + dev_name = "vdin1"; + status = "ok"; + reserve-iomap = "true"; + flag_cma = <0x0>; + interrupts = <0x0 0x55 0x1>; + rdma-irq = <0x4>; + clocks = <0x6 0x11 0x6 0x29>; + clock-names = "fclk_div5", "cts_vdin_meas_clk"; + vdin_id = <0x1>; + tv_bit_mode = <0x1>; + }; + + amvdec_656in0 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in0"; + status = "ok"; + reg = <0x0 0xd0048000 0x0 0x7c>; + clocks = <0x6 0x7 0x6 0x26>; + clock-names = "fclk_div2", "cts_bt656_clk0"; + bt656_id = <0x0>; + }; + + amvdec_656in1 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in1"; + status = "ok"; + reg = <0x0 0xd0050000 0x0 0x7c>; + clocks = <0x6 0x7 0x6 0x27>; + clock-names = "fclk_div2", "cts_bt656_clk1"; + bt656_id = <0x1>; + }; + + amlvecm { + compatible = "amlogic, vecm"; + dev_name = "aml_vecm"; + status = "okay"; + gamma_en = <0x0>; + wb_en = <0x0>; + cm_en = <0x0>; + }; + + amvenc_avc { + compatible = "amlogic, amvenc_avc"; + dev_name = "amvenc_avc"; + status = "okay"; + interrupts = <0x0 0x2d 0x1>; + interrupt-names = "mailbox_2"; + }; + + hevc_enc { + compatible = "cnm, HevcEnc"; + dev_name = "HevcEnc"; + status = "okay"; + interrupts = <0x0 0xbb 0x1>; + interrupt-names = "wave420l_irq"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_reg_base { + reg = <0x0 0xc8810000 0x0 0x4000>; + }; + }; + + vpu { + compatible = "amlogic, vpu"; + dev_name = "vpu"; + status = "ok"; + clk_level = <0x7>; + }; + + bt-dev { + compatible = "amlogic, bt-dev"; + dev_name = "bt-dev"; + status = "okay"; + gpio_reset = <0x28 0x60 0x0>; + }; + + rtc { + compatible = "amlogic, aml_vrtc"; + alarm_reg_addr = <0xc81000a8>; + timer_e_addr = <0xc1109988>; + init_date = "2015/01/01"; + status = "okay"; + }; + + wifi { + compatible = "amlogic, aml_wifi"; + dev_name = "aml_wifi"; + status = "okay"; + interrupt_pin = <0x28 0x56 0x0>; + interrupts = <0x0 0x44 0x4>; + irq_trigger_type = "GPIO_IRQ_LOW"; + power_on_pin = <0x28 0x55 0x0>; + dhd_static_buf; + pinctrl-names = "wifi_32k_pins"; + pinctrl-0 = <0x31>; + pwm_config = <0x32>; + }; + + wifi_pwm_conf { + pwm_channel1 = <0x4>; + pwm_channel2 = <0xc>; + pwm_channel1_conf = <0x774d 0x3ba6 0x6>; + pwm_channel2_conf = <0x7736 0x3b9b 0x9>; + linux,phandle = <0x32>; + phandle = <0x32>; + }; + + emmc { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0074000 0x0 0x2000>; + interrupts = <0x0 0xda 0x1>; + pinctrl-names = "emmc_clk_cmd_pins", "emmc_all_pins"; + pinctrl-0 = <0x33>; + pinctrl-1 = <0x34 0x35 0x36>; + + emmc { + status = "disabled"; + pinname = "emmc"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_8_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_1_8V_DDR", "MMC_CAP_HW_RESET", "MMC_CAP_ERASE", "MMC_CAP_CMD23"; + caps2 = "MMC_CAP2_HS200", "MMC_CAP2_HS400"; + f_min = <0x493e0>; + f_max = <0x5f5e100>; + max_req_size = <0x20000>; + gpio_dat3 = <0x28 0x1d 0x0>; + hw_reset = <0x28 0x23 0x0>; + card_type = <0x1>; + }; + }; + + sd { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0072000 0x0 0x2000>; + interrupts = <0x0 0xd9 0x1 0x0 0x43 0x1 0x0 0x45 0x1>; + pinctrl-names = "sd_clk_cmd_pins", "sd_all_pins", "sd_1bit_pins", "sd_clk_cmd_uart_pins", "sd_1bit_uart_pins", "sd_to_ao_uart_pins", "ao_to_sd_uart_pins", "ao_to_sd_jtag_pins", "sd_to_ao_jtag_pins"; + pinctrl-0 = <0x37>; + pinctrl-1 = <0x38>; + pinctrl-2 = <0x39>; + pinctrl-3 = <0x3a>; + pinctrl-4 = <0x3b>; + pinctrl-5 = <0x3c>; + pinctrl-6 = <0x3d>; + pinctrl-7 = <0x3e>; + pinctrl-8 = <0x3f>; + + sd { + status = "okay"; + pinname = "sd"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_4_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED"; + f_min = <0x61a80>; + f_max = <0x5f5e100>; + max_req_size = <0x20000>; + gpio_dat3 = <0x28 0x2e 0x0>; + jtag_pin = <0x28 0x2a 0x0>; + gpio_cd = <0x28 0x30 0x0>; + card_in_delay = <0x190>; + irq_in = <0x3>; + irq_out = <0x5>; + card_type = <0x5>; + }; + }; + + sdio { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0070000 0x0 0x2000>; + interrupts = <0x0 0xd8 0x1>; + pinctrl-names = "sdio_clk_cmd_pins", "sdio_all_pins"; + pinctrl-0 = <0x40>; + pinctrl-1 = <0x41>; + + sdio { + status = "okay"; + pinname = "sdio"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_4_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_UHS_SDR12", "MMC_CAP_UHS_SDR25", "MMC_CAP_UHS_SDR50", "MMC_CAP_UHS_SDR104", "MMC_PM_KEEP_POWER"; + f_min = <0x61a80>; + f_max = <0xbebc200>; + max_req_size = <0x20000>; + card_type = <0x3>; + }; + }; + + nand { + compatible = "amlogic, aml_nand"; + dev_name = "nand"; + status = "disabled"; + reg = <0x0 0xd0074800 0x0 0x200>; + interrupts = <0x0 0x22 0x1>; + pinctrl-names = "nand_rb_mod", "nand_norb_mod", "nand_cs_pins_only"; + pinctrl-0 = <0x42 0x43 0x44>; + pinctrl-1 = <0x42 0x43 0x44>; + pinctrl-2 = <0x45>; + device_id = <0x0>; + plat-names = "nandnormal"; + plat-num = <0x1>; + plat-part-0 = <0x46>; + + normal { + enable_pad = "ce0", "ce1", "ce2", "ce3"; + busy_pad = "rb0"; + linux,phandle = <0x46>; + phandle = <0x46>; + }; + }; + + aml_nftl { + compatible = "amlogic, nftl"; + }; + + partitions { + parts = <0xb>; + part-0 = <0x47>; + part-1 = <0x48>; + part-2 = <0x49>; + part-3 = <0x4a>; + part-4 = <0x4b>; + part-5 = <0x4c>; + part-6 = <0x4d>; + part-7 = <0x4e>; + part-8 = <0x4f>; + part-9 = <0x50>; + part-10 = <0x51>; + + logo { + pname = "logo"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x47>; + phandle = <0x47>; + }; + + recovery { + pname = "recovery"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x48>; + phandle = <0x48>; + }; + + rsv { + pname = "rsv"; + size = <0x0 0x800000>; + mask = <0x1>; + linux,phandle = <0x49>; + phandle = <0x49>; + }; + + tee { + pname = "tee"; + size = <0x0 0x800000>; + mask = <0x1>; + linux,phandle = <0x4a>; + phandle = <0x4a>; + }; + + crypt { + pname = "crypt"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x4b>; + phandle = <0x4b>; + }; + + misc { + pname = "misc"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x4c>; + phandle = <0x4c>; + }; + + instaboot { + pname = "instaboot"; + size = <0x0 0x20000000>; + mask = <0x1>; + linux,phandle = <0x4d>; + phandle = <0x4d>; + }; + + boot { + pname = "boot"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x4e>; + phandle = <0x4e>; + }; + + system { + pname = "system"; + size = <0x0 0x40000000>; + mask = <0x1>; + linux,phandle = <0x4f>; + phandle = <0x4f>; + }; + + cache { + pname = "cache"; + size = <0x0 0x20000000>; + mask = <0x2>; + linux,phandle = <0x50>; + phandle = <0x50>; + }; + + data { + pname = "data"; + size = <0xffffffff 0xffffffff>; + mask = <0x4>; + linux,phandle = <0x51>; + phandle = <0x51>; + }; + }; + + unifykey { + compatible = "amlogic, unifykey"; + status = "ok"; + unifykey-num = <0xe>; + unifykey-index-0 = <0x52>; + unifykey-index-1 = <0x53>; + unifykey-index-2 = <0x54>; + unifykey-index-3 = <0x55>; + unifykey-index-4 = <0x56>; + unifykey-index-5 = <0x57>; + unifykey-index-6 = <0x58>; + unifykey-index-7 = <0x59>; + unifykey-index-8 = <0x5a>; + unifykey-index-9 = <0x5b>; + unifykey-index-10 = <0x5c>; + unifykey-index-11 = <0x5d>; + unifykey-index-12 = <0x5e>; + unifykey-index-13 = <0x5f>; + + key_0 { + key-name = "usid"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x52>; + phandle = <0x52>; + }; + + key_1 { + key-name = "mac"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x53>; + phandle = <0x53>; + }; + + key_2 { + key-name = "hdcp"; + key-device = "secure"; + key-type = "sha1"; + key-permit = "read", "write", "del"; + linux,phandle = <0x54>; + phandle = <0x54>; + }; + + key_3 { + key-name = "secure_boot_set"; + key-device = "efuse"; + key-permit = "write"; + linux,phandle = <0x55>; + phandle = <0x55>; + }; + + key_4 { + key-name = "mac_bt"; + key-device = "normal"; + key-permit = "read", "write", "del"; + key-type = "mac"; + linux,phandle = <0x56>; + phandle = <0x56>; + }; + + key_5 { + key-name = "mac_wifi"; + key-device = "normal"; + key-permit = "read", "write", "del"; + key-type = "mac"; + linux,phandle = <0x57>; + phandle = <0x57>; + }; + + key_6 { + key-name = "hdcp2_tx"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x58>; + phandle = <0x58>; + }; + + key_7 { + key-name = "hdcp2_rx"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x59>; + phandle = <0x59>; + }; + + key_8 { + key-name = "widevinekeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5a>; + phandle = <0x5a>; + }; + + key_9 { + key-name = "deviceid"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5b>; + phandle = <0x5b>; + }; + + key_10 { + key-name = "hdcp22_fw_private"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5c>; + phandle = <0x5c>; + }; + + key_11 { + key-name = "PlayReadykeybox25"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5d>; + phandle = <0x5d>; + }; + + key_12 { + key-name = "prpubkeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5e>; + phandle = <0x5e>; + }; + + key_13 { + key-name = "prprivkeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5f>; + phandle = <0x5f>; + }; + }; + + amhdmitx { + compatible = "amlogic, amhdmitx"; + dev_name = "amhdmitx"; + status = "okay"; + pinctrl-names = "hdmitx_hpd", "hdmitx_ddc"; + pinctrl-0 = <0x60>; + pinctrl-1 = <0x61>; + interrupts = <0x0 0x39 0x1>; + interrupt-names = "hdmitx_hpd"; + clocks = <0x6 0xb 0x6 0xc 0x6 0xd 0x6 0xe 0x6 0xf 0x6 0x16>; + clock-names = "hdmitx_clk_sys", "hdmitx_clk_encp", "hdmitx_clk_enci", "hdmitx_clk_pixel", "hdmitx_clk_phy", "hdmitx_clk_vid"; + gpio_i2c_en = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + }; + + aocec { + compatible = "amlogic, amlogic-aocec"; + device_name = "aocec"; + status = "okay"; + vendor_name = "Amlogic"; + vendor_id = <0x0>; + product_desc = "GXBB Mbox"; + cec_osd_string = "MBox"; + port_num = <0x1>; + arc_port_mask = <0x0>; + interrupts = <0x0 0xc7 0x1>; + interrupt-names = "hdmi_aocec"; + pinctrl-names = "hdmitx_aocec"; + pinctrl-0 = <0x62>; + reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + }; + + tvout { + compatible = "amlogic, tvout"; + dev_name = "tvout"; + status = "okay"; + }; + + i2c_gpio { + compatible = "i2c-gpio"; + status = "okay"; + dev_name = "i2c-gpio"; + i2c-gpio,delay-us = <0xa>; + gpios = <0x28 0x11 0x0 0x28 0x12 0x0>; + #address-cells = <0x2>; + #size-cells = <0x2>; + i2c-gpio,timeout-ms = <0xa>; + + i2c_gpio_edid { + compatible = "i2c-gpio-edid"; + reg = <0x50 0x0 0x0 0x0>; + }; + }; + + serial@c81004c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004c0 0x0 0x18>; + interrupts = <0x0 0xc1 0x1>; + status = "okay"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + xtal_tick_en = <0x1>; + fifosize = <0x40>; + pinctrl-names = "default"; + support-sysrq = <0x0>; + }; + + serial@c11084c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084c0 0x0 0x18>; + interrupts = <0x0 0x1a 0x1>; + status = "okay"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x80>; + pinctrl-names = "default"; + pinctrl-0 = <0x63>; + resets = <0x6 0xd>; + }; + + serial@c11084dc { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084dc 0x0 0x18>; + interrupts = <0x0 0x4b 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x64>; + resets = <0x6 0x30>; + }; + + serial@c1108700 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc1108700 0x0 0x18>; + interrupts = <0x0 0x5d 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x65>; + resets = <0x6 0x4f>; + }; + + serial@c81004e0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004e0 0x0 0x18>; + interrupts = <0x0 0xc5 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x66>; + }; + + canvas { + compatible = "amlogic, meson, canvas"; + dev_name = "amlogic-canvas"; + status = "ok"; + reg = <0x0 0xc8838000 0x0 0x400>; + }; + + rdma { + compatible = "amlogic, meson, rdma"; + dev_name = "amlogic-rdma"; + status = "ok"; + interrupts = <0x0 0x59 0x1>; + interrupt-names = "rdma"; + }; + + dwc3@c9000000 { + compatible = "synopsys, dwc3"; + reg = <0x0 0xc9000000 0x0 0x100000>; + interrupts = <0x0 0x1e 0x4>; + usb-phy = <0x67 0x68>; + cpu-type = "gxl"; + clock-src = "usb3.0"; + }; + + usb2phy@d0078000 { + compatible = "amlogic, amlogic-new-usb2"; + portnum = <0x3>; + reg = <0x0 0xd0078000 0x0 0x80>; + linux,phandle = <0x67>; + phandle = <0x67>; + }; + + usb3phy@d0078080 { + compatible = "amlogic, amlogic-new-usb3"; + portnum = <0x0>; + reg = <0x0 0xd0078080 0x0 0x20>; + interrupts = <0x0 0x10 0x4>; + otg = <0x1>; + gpio-vbus-power = "GPIOAO_5"; + gpios = <0x27 0x5 0x0>; + linux,phandle = <0x68>; + phandle = <0x68>; + }; + + dwc2_a { + compatible = "amlogic,dwc2"; + device_name = "dwc2_a"; + reg = <0x0 0xc9100000 0x0 0x40000>; + status = "okay"; + interrupts = <0x0 0x1f 0x4>; + pl-periph-id = <0x0>; + clock-src = "usb0"; + port-id = <0x0>; + port-type = <0x2>; + port-speed = <0x0>; + port-config = <0x0>; + port-dma = <0x0>; + port-id-mode = <0x0>; + usb-fifo = <0x2d8>; + cpu-type = "gxl"; + controller-type = <0x2>; + phy-reg = <0xd0078000>; + phy-reg-size = <0xa0>; + resets = <0x6 0x3a 0x6 0x48 0x6 0x36>; + reset-names = "usb_general", "usb1", "usb1_to_ddr"; + }; + + I2S { + #sound-dai-cells = <0x0>; + resets = <0x6 0x26 0x6 0x12 0x6 0x28 0x6 0x29 0x6 0x2a 0x6 0x2b 0x6 0x2c 0x6 0x2d 0x6 0x2f 0x6 0x8e 0x6 0x22>; + reset-names = "top_glue", "aud_buf", "i2s_out", "amclk_measure", "aififo2", "aud_mixer", "mixer_reg", "adc", "top_level", "aoclk", "aud_in"; + clocks = <0x6 0x21 0x6 0x22>; + clock-names = "mpll2", "mclk"; + compatible = "amlogic, aml-i2s-dai"; + linux,phandle = <0x74>; + phandle = <0x74>; + }; + + SPDIF { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-spdif-dai"; + resets = <0x6 0x27 0x6 0x90>; + reset-names = "iec958", "iec958_amclk"; + clocks = <0x6 0x20 0x6 0x24 0x6 0x22 0x6 0x25 0x6 0xa>; + clock-names = "mpll1", "i958", "mclk", "spdif", "clk_81"; + linux,phandle = <0x75>; + phandle = <0x75>; + }; + + PCM { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-pcm-dai"; + pinctrl-names = "aml_audio_btpcm"; + pinctrl-0 = <0x69>; + clocks = <0x6 0x1f 0x6 0x2a 0x6 0x2b>; + clock-names = "mpll0", "pcm_mclk", "pcm_sclk"; + pcm_mode = <0x1>; + linux,phandle = <0x76>; + phandle = <0x76>; + }; + + i2s_platform { + compatible = "amlogic, aml-i2s"; + interrupts = <0x0 0x1d 0x1>; + linux,phandle = <0x72>; + phandle = <0x72>; + }; + + pcm_platform { + compatible = "amlogic, aml-pcm"; + linux,phandle = <0x73>; + phandle = <0x73>; + }; + + spdif_codec { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-spdif-codec"; + pinctrl-names = "aml_audio_spdif"; + pinctrl-0 = <0x6a>; + linux,phandle = <0x78>; + phandle = <0x78>; + }; + + pcm_codec { + #sound-dai-cells = <0x0>; + compatible = "amlogic, pcm2BT-codec"; + linux,phandle = <0x79>; + phandle = <0x79>; + }; + + dummy { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml_dummy_codec"; + status = "disable"; + }; + + t9015 { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml_codec_T9015"; + reg = <0x0 0xc8832000 0x0 0x14>; + status = "okay"; + linux,phandle = <0x77>; + phandle = <0x77>; + }; + + aml_m8_snd { + compatible = "aml, aml_snd_m8"; + status = "okay"; + aml-sound-card,format = "i2s"; + aml_sound_card,name = "AML-M8AUDIO"; + aml,audio-routing = "Ext Spk", "LOUTL", "Ext Spk", "LOUTR"; + mute_gpio-gpios = <0x28 0x15 0x0>; + mute_inv; + hp_disable; + hp_paraments = <0x320 0x12c 0x0 0x5 0x1>; + pinctrl-names = "aml_snd_m8"; + pinctrl-0 = <0x6b>; + cpu_list = <0x6c 0x6d 0x6e>; + codec_list = <0x6f 0x70 0x71>; + plat_list = <0x72 0x72 0x73>; + + cpudai0 { + sound-dai = <0x74>; + linux,phandle = <0x6c>; + phandle = <0x6c>; + }; + + cpudai1 { + sound-dai = <0x75>; + linux,phandle = <0x6d>; + phandle = <0x6d>; + }; + + cpudai2 { + sound-dai = <0x76>; + linux,phandle = <0x6e>; + phandle = <0x6e>; + }; + + codec0 { + sound-dai = <0x77>; + linux,phandle = <0x6f>; + phandle = <0x6f>; + }; + + codec1 { + sound-dai = <0x78>; + linux,phandle = <0x70>; + phandle = <0x70>; + }; + + codec2 { + sound-dai = <0x79>; + linux,phandle = <0x71>; + phandle = <0x71>; + }; + }; + + pwm { + compatible = "amlogic, meson-pwm"; + status = "okay"; + pwm-outputs = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7>; + pwm-outputs-new = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf>; + reg = <0x0 0xc1108550 0x0 0x30 0x0 0xc8100550 0x0 0x10>; + clocks = <0x6 0x2 0x6 0x5 0x6 0x9 0x6 0x8>; + clock-names = "xtal", "vid_pll_clk", "fclk_div4", "fclk_div3"; + clock-select = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0>; + clock-select-new = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0>; + }; + + gpio_keypad { + compatible = "amlogic, gpio_keypad"; + status = "okay"; + scan_period = <0x14>; + key_num = <0x1>; + key_name = "power"; + key_code = <0x74>; + key_pin = <0x27 0x2 0x0>; + irq_keyup = <0x6>; + irq_keydown = <0x7>; + }; + + adc_keypad { + compatible = "amlogic, adc_keypad"; + status = "okay"; + key_name = "home"; + key_num = <0x1>; + key_code = <0x66>; + key_chan = <0x0>; + key_val = <0xa>; + key_tolerance = <0x28>; + }; + + aml-sensor@0 { + compatible = "amlogic, aml-thermal"; + device_name = "thermal"; + #thermal-sensor-cells = <0x1>; + linux,phandle = <0x7a>; + phandle = <0x7a>; + + cooling_devices { + + cpufreq_cool_cluster0 { + min_state = <0xf4240>; + dyn_coeff = <0x8c>; + cluster_id = <0x0>; + node_name = "cluster0"; + device_type = "cpufreq"; + }; + + cpufreq_cool_cluster1 { + min_state = <0x7a120>; + dyn_coeff = <0x8c>; + cluster_id = <0x1>; + node_name = "cluster1"; + device_type = "cpufreq"; + }; + + cpucore_cool_cluster0 { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x0>; + node_name = "cpu_core_cluster0"; + device_type = "cpucore"; + }; + + cpucore_cool_cluster1 { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x1>; + node_name = "cpu_core_cluster1"; + device_type = "cpucore"; + }; + + gpufreq_cool { + min_state = <0x190>; + dyn_coeff = <0x1b5>; + cluster_id = <0x0>; + node_name = "t82x"; + device_type = "gpufreq"; + }; + + gpucore_cool { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x0>; + node_name = "thermal_gpu_cores"; + device_type = "gpucore"; + }; + }; + + cpu_core_cluster0 { + #cooling-cells = <0x2>; + linux,phandle = <0x7e>; + phandle = <0x7e>; + }; + + cpu_core_cluster1 { + #cooling-cells = <0x2>; + linux,phandle = <0x7f>; + phandle = <0x7f>; + }; + + thermal_gpu_cores { + #cooling-cells = <0x2>; + linux,phandle = <0x81>; + phandle = <0x81>; + }; + }; + + thermal-zones { + + soc_thermal { + polling-delay = <0x3e8>; + polling-delay-passive = <0x64>; + sustainable-power = <0x992>; + thermal-sensors = <0x7a 0x3>; + + trips { + + trip-point@0 { + temperature = <0x11170>; + hysteresis = <0x3e8>; + type = "passive"; + }; + + trip-point@1 { + temperature = <0x13880>; + hysteresis = <0x3e8>; + type = "passive"; + linux,phandle = <0x7b>; + phandle = <0x7b>; + }; + + trip-point@2 { + temperature = <0x14c08>; + hysteresis = <0x1388>; + type = "hot"; + }; + + trip-point@3 { + temperature = <0x3f7a0>; + hysteresis = <0x3e8>; + type = "critical"; + }; + }; + + cooling-maps { + + cpufreq_cooling_map0 { + trip = <0x7b>; + cooling-device = <0x7c 0x0 0x4>; + contribution = <0x400>; + }; + + cpufreq_cooling_map1 { + trip = <0x7b>; + cooling-device = <0x7d 0x0 0x4>; + contribution = <0x400>; + }; + + cpucore_cooling_map0 { + trip = <0x7b>; + cooling-device = <0x7e 0x0 0x3>; + contribution = <0x400>; + }; + + cpucore_cooling_map1 { + trip = <0x7b>; + cooling-device = <0x7f 0x0 0x3>; + contribution = <0x400>; + }; + + gpufreq_cooling_map { + trip = <0x7b>; + cooling-device = <0x80 0x0 0x4>; + contribution = <0x400>; + }; + + gpucore_cooling_map { + trip = <0x7b>; + cooling-device = <0x81 0x0 0x2>; + contribution = <0x400>; + }; + }; + }; + }; +}; diff --git a/arch/arm64/boot/dts/kvim2_linux.dts b/arch/arm64/boot/dts/kvim2_linux.dts new file mode 100644 index 0000000000000..f541628001381 --- /dev/null +++ b/arch/arm64/boot/dts/kvim2_linux.dts @@ -0,0 +1,2381 @@ +/dts-v1/; + +/ { + model = "Amlogic"; + compatible = "kvim"; + amlogic-dt-id = "kvim"; + interrupt-parent = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + + t82x { + compatible = "arm,malit602", "arm,malit60x", "arm,malit6xx", "arm,mali-midgard"; + #cooling-cells = <0x2>; + reg = <0x0 0xd00c0000 0x0 0x100000 0x0 0xc1104440 0x0 0x1000 0x0 0xc8100000 0x0 0x1000 0x0 0xc883c000 0x0 0x1000 0x0 0xc1104440 0x0 0x1000>; + interrupt-parent = <0x1>; + interrupts = <0x0 0xa0 0x4 0x0 0xa1 0x4 0x0 0xa2 0x4>; + interrupt-names = "GPU", "MMU", "JOB"; + num_of_pp = <0x3>; + sc_mpp = <0x1>; + operating-points = <0xa2c2a 0xf4240 0x7a120 0xf4240 0x61a80 0xf4240 0x45c12 0xf4240 0x3d090 0xf4240 0x1e848 0xf4240>; + tbl = <0x2 0x3 0x4 0x5 0x5>; + clocks = <0x6 0x8 0x6 0x9 0x6 0x11 0x6 0x12 0x6 0x1e 0x6 0x15 0x6 0x13 0x6 0x14>; + clock-names = "fclk_div3", "fclk_div4", "fclk_div5", "fclk_div7", "gp0_pll", "clk_gpu", "clk_gpu_0", "clk_gpu_1"; + linux,phandle = <0x85>; + phandle = <0x85>; + + clk125_cfg { + clk_freq = <0x7735940>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x1e 0x78>; + }; + + dvfs250_cfg { + clk_freq = <0xee6b280>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x50 0xaa>; + }; + + dvfs285_cfg { + clk_freq = <0x1107a650>; + clk_parent = "fclk_div7"; + clkp_freq = <0x1107a650>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x64 0xbe>; + linux,phandle = <0x2>; + phandle = <0x2>; + }; + + dvfs400_cfg { + clk_freq = <0x17d78400>; + clk_parent = "fclk_div5"; + clkp_freq = <0x17d78400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x98 0xcf>; + linux,phandle = <0x3>; + phandle = <0x3>; + }; + + dvfs500_cfg { + clk_freq = <0x1dcd6500>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xb4 0xdc>; + linux,phandle = <0x4>; + phandle = <0x4>; + }; + + dvfs666_cfg { + clk_freq = <0x27b25a80>; + clk_parent = "fclk_div3"; + clkp_freq = <0x27b25a80>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xd2 0xec>; + linux,phandle = <0x5>; + phandle = <0x5>; + }; + + dvfs800_cfg { + clk_freq = <0x2f34f600>; + clk_parent = "gp0_pll"; + clkp_freq = <0x2f34f600>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xe6 0xff>; + }; + }; + + gpu_clk@c883c00 { + compatible = "meson, gpu-clkgen-1.00.a"; + #clock-cells = <0x0>; + reg = <0x0 0xc883c000 0x0 0x1000>; + clocks = <0x6 0x8 0x6 0x9 0x6 0x11 0x6 0x12 0x6 0x1e 0x6 0x15 0x6 0x13 0x6 0x14>; + clock-names = "fclk_div3", "fclk_div4", "fclk_div5", "fclk_div7", "gp0_pll", "clk_gpu", "clk_gpu_0", "clk_gpu_1"; + clock-output-names = "clk_mali"; + tbl = <0x7 0x8 0x9 0xa 0xb 0xc>; + + clk125_cfg { + clk_freq = <0x7735940>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x1e 0x78>; + linux,phandle = <0x7>; + phandle = <0x7>; + }; + + clk250_cfg { + clk_freq = <0xee6b280>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x50 0xaa>; + linux,phandle = <0x8>; + phandle = <0x8>; + }; + + clk285_cfg { + clk_freq = <0x1107a650>; + clk_parent = "fclk_div7"; + clkp_freq = <0x1107a650>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x64 0xbe>; + linux,phandle = <0x9>; + phandle = <0x9>; + }; + + clk400_cfg { + clk_freq = <0x17d78400>; + clk_parent = "fclk_div5"; + clkp_freq = <0x17d78400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x98 0xcf>; + linux,phandle = <0xa>; + phandle = <0xa>; + }; + + clk500_cfg { + clk_freq = <0x1dcd6500>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xb4 0xdc>; + linux,phandle = <0xb>; + phandle = <0xb>; + }; + + clk666_cfg { + clk_freq = <0x27bc8410>; + clk_parent = "fclk_div3"; + clkp_freq = <0x27bc8410>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xd2 0xec>; + linux,phandle = <0xc>; + phandle = <0xc>; + }; + + clk720_cfg { + clk_freq = <0x2aea5400>; + clk_parent = "gp0_pll"; + clkp_freq = <0x2aea5400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xe6 0xff>; + }; + }; + + cpus { + #address-cells = <0x2>; + #size-cells = <0x0>; + + cpu-map { + + cluster0 { + #cooling-cells = <0x2>; + linux,phandle = <0x81>; + phandle = <0x81>; + + core0 { + cpu = <0xd>; + }; + + core1 { + cpu = <0xe>; + }; + + core2 { + cpu = <0xf>; + }; + + core3 { + cpu = <0x10>; + }; + }; + + cluster1 { + #cooling-cells = <0x2>; + linux,phandle = <0x82>; + phandle = <0x82>; + + core0 { + cpu = <0x11>; + }; + + core1 { + cpu = <0x12>; + }; + + core2 { + cpu = <0x13>; + }; + + core3 { + cpu = <0x14>; + }; + }; + }; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xd>; + phandle = <0xd>; + }; + + cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xe>; + phandle = <0xe>; + }; + + cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xf>; + phandle = <0xf>; + }; + + cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x10>; + phandle = <0x10>; + }; + + cpu@100 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x100>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x11>; + phandle = <0x11>; + }; + + cpu@101 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x101>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x12>; + phandle = <0x12>; + }; + + cpu@102 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x102>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x13>; + phandle = <0x13>; + }; + + cpu@103 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x103>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x14>; + phandle = <0x14>; + }; + + idle-states { + entry-method = "arm,psci"; + + cpu-sleep-0 { + compatible = "arm, idle-state"; + arm,psci-suspend-param = <0x10000>; + local-timer-stop; + entry-latency-us = <0x1f40>; + exit-latency-us = <0x1f40>; + min-residency-us = <0x4e20>; + linux,phandle = <0x16>; + phandle = <0x16>; + }; + + cluster-sleep-0 { + compatible = "arm, idle-state"; + arm,psci-suspend-param = <0x1010000>; + local-timer-stop; + entry-latency-us = <0x1f40>; + exit-latency-us = <0x1f40>; + min-residency-us = <0x61a8>; + linux,phandle = <0x17>; + phandle = <0x17>; + }; + }; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x1 0xd 0xff01 0x1 0xe 0xff01 0x1 0xb 0xff01 0x1 0xa 0xff01>; + }; + + timer_bc { + compatible = "arm, meson-bc-timer"; + reg = <0x0 0xc1109990 0x0 0x4 0x0 0xc1109994 0x0 0x4>; + timer_name = "Meson TimerF"; + clockevent-rating = <0x12c>; + clockevent-shift = <0x14>; + clockevent-features = <0x23>; + interrupts = <0x0 0x3c 0x1>; + bit_enable = <0x10>; + bit_mode = <0xc>; + bit_resolution = <0x0>; + }; + + arm_pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0x0 0x89 0x4 0x0 0x8a 0x4 0x0 0x99 0x4 0x0 0x9a 0x4>; + }; + + pm { + compatible = "amlogic, pm"; + device_name = "aml_pm"; + gxbaby-suspend; + reg = <0x0 0xc81000a8 0x0 0x4 0x0 0xc810023c 0x0 0x4>; + }; + + interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <0x3>; + #address-cells = <0x0>; + interrupt-controller; + reg = <0x0 0xc4301000 0x0 0x1000 0x0 0xc4302000 0x0 0x100>; + interrupts = <0x1 0x9 0xf04>; + linux,phandle = <0x1>; + phandle = <0x1>; + }; + + aml_restart { + compatible = "aml, restart"; + sys_reset = <0x84000009>; + sys_poweroff = <0x84000008>; + }; + + psci { + compatible = "arm,psci"; + method = "smc"; + cpu_suspend = <0xc4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xc4000003>; + migrate = <0xc4000005>; + }; + + secmon { + compatible = "amlogic, secmon"; + memory-region = <0x18>; + in_base_func = <0x82000020>; + out_base_func = <0x82000021>; + }; + + securitykey { + compatible = "aml, securitykey"; + storage_query = <0x82000060>; + storage_read = <0x82000061>; + storage_write = <0x82000062>; + storage_tell = <0x82000063>; + storage_verify = <0x82000064>; + storage_status = <0x82000065>; + storage_list = <0x82000067>; + storage_remove = <0x82000068>; + storage_in_func = <0x82000023>; + storage_out_func = <0x82000024>; + storage_block_func = <0x82000025>; + storage_size_func = <0x82000027>; + storage_set_enctype = <0x8200006a>; + storage_get_enctype = <0x8200006b>; + storage_version = <0x8200006c>; + }; + + cpu_iomap { + compatible = "amlogic, iomap"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_cbus_base { + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + + io_apb_base { + reg = <0x0 0xd0000000 0x0 0x200000>; + }; + + io_aobus_base { + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + }; + + cpufreq { + compatible = "arm, scpi-cpufreq"; + }; + + amlogic-watchdog { + compatible = "amlogic, gx-wdt"; + status = "disable"; + default_timeout = <0xa>; + reset_watchdog_method = <0x1>; + reset_watchdog_time = <0x2>; + shutdown_timeout = <0xa>; + firmware_timeout = <0x6>; + suspend_timeout = <0x6>; + reg = <0x0 0xc11098d0 0x0 0x10>; + clocks = <0x6 0x2>; + }; + + amlogic-jtag { + compatible = "amlogic, jtag"; + status = "okay"; + pinctrl-names = "jtag_apao_pins", "jtag_apee_pins"; + pinctrl-0 = <0x19>; + pinctrl-1 = <0x1a>; + }; + + meson_clock { + compatible = "amlogic, gxl-clock"; + reg = <0x0 0xc883c000 0x0 0x1000 0x0 0xc8100000 0x0 0x1000>; + #clock-cells = <0x1>; + #reset-cells = <0x1>; + sys_max = <0x5b8d8000>; + linux,phandle = <0x6>; + phandle = <0x6>; + }; + + cpu_info { + compatible = "amlogic, cpuinfo"; + cpuinfo_cmd = <0x82000044>; + }; + + pinmux { + compatible = "amlogic, pinmux-gxl"; + dev_name = "pinmux"; + #pinmux-cells = <0x2>; + #address-cells = <0x2>; + #size-cells = <0x2>; + reg = <0x0 0xc1109880 0x0 0x10>; + ranges; + + banks@c11080b0 { + reg = <0x0 0xc88344b0 0x0 0x28 0x0 0xc88344e8 0x0 0x14 0x0 0xc8834520 0x0 0x14 0x0 0xc8834430 0x0 0x40>; + reg-names = "mux", "pull", "pull-enable", "gpio"; + gpio-controller; + #gpio-cells = <0x2>; + linux,phandle = <0x38>; + phandle = <0x38>; + }; + + ao-bank@c1108030 { + reg = <0x0 0xc8100014 0x0 0x8 0x0 0xc810002c 0x0 0x4 0x0 0xc8100024 0x0 0x8>; + reg-names = "mux", "pull", "gpio"; + gpio-controller; + #gpio-cells = <0x2>; + linux,phandle = <0x37>; + phandle = <0x37>; + }; + + external_eth_pins { + amlogic,setmask = <0x4 0xfffc00>; + amlogic,clrmask = <0x4 0x3fc 0x3 0xffcff800>; + amlogic,pins = "GPIOZ_0", "GPIOZ_1", "GPIOZ_2", "GPIOZ_3", "GPIOZ_4", "GPIOZ_5", "GPIOZ_6", "GPIOZ_7", "GPIOZ_8", "GPIOZ_9", "GPIOZ_10", "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + linux,phandle = <0x3b>; + phandle = <0x3b>; + }; + + internal_eth_pins { + amlogic,setmask = <0x4 0x3000000>; + amlogic,clrmask = <0x3 0x300000>; + amlogic,pins = "GPIOZ_14", "GPIOZ_15"; + }; + + jtag_apao_pin { + amlogic,clrmask = <0x6 0x7fe0000>; + amlogic,pins = "GPIOH_6", "GPIOH_7", "GPIOH_8", "GPIOH_9"; + linux,phandle = <0x19>; + phandle = <0x19>; + }; + + jtag_apee_pin { + amlogic,clrmask = <0x6 0x3c>; + amlogic,pins = "CARD_0", "CARD_1", "CARD_2", "CARD_3"; + linux,phandle = <0x1a>; + phandle = <0x1a>; + }; + + remote_pin { + amlogic,setmask = <0x10 0x1>; + amlogic,pins = "GPIOAO_7"; + linux,phandle = <0x26>; + phandle = <0x26>; + }; + + ao_uart { + amlogic,setmask = <0x10 0x1800>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + }; + + ao_b_uart { + amlogic,setmask = <0x10 0x1800000>; + amlogic,pins = "GPIOAO_4", "GPIOAO_5"; + linux,phandle = <0x6b>; + phandle = <0x6b>; + }; + + a_uart { + amlogic,setmask = <0x5 0xf0000>; + amlogic,clrmask = <0x5 0x3c0>; + amlogic,pins = "GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15"; + linux,phandle = <0x68>; + phandle = <0x68>; + }; + + b_uart { + amlogic,setmask = <0x2 0x18000>; + amlogic,pins = "GPIODV_24", "GPIODV_25"; + linux,phandle = <0x69>; + phandle = <0x69>; + }; + + c_uart { + amlogic,setmask = <0x5 0x3000>; + amlogic,pins = "GPIOX_8", "GPIOX_9"; + linux,phandle = <0x6a>; + phandle = <0x6a>; + }; + + wifi_32k_pins { + amlogic,setmask = <0x5 0x8000>; + amlogic,pins = "GPIOX_16"; + linux,phandle = <0x41>; + phandle = <0x41>; + }; + + sd_clk_cmd_pins { + amlogic,setmask = <0x6 0xc 0x10 0x1800>; + amlogic,pins = "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x47>; + phandle = <0x47>; + }; + + sd_all_pins { + amlogic,setmask = <0x6 0x3f 0x10 0x1800>; + amlogic,clrmask = <0x6 0xfc0>; + amlogic,pins = "CARD_0", "CARD_1", "CARD_2", "CARD_3", "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x48>; + phandle = <0x48>; + }; + + sd_1bit_pins { + amlogic,setmask = <0x6 0x1c 0x10 0x1800>; + amlogic,clrmask = <0x6 0xcc3>; + amlogic,pins = "CARD_1", "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x49>; + phandle = <0x49>; + }; + + sd_clk_cmd_uart_pins { + amlogic,setmask = <0x6 0x30c>; + amlogic,clrmask = <0x6 0xcc3 0x10 0x1800>; + amlogic,pins = "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4a>; + phandle = <0x4a>; + }; + + sd_1bit_uart_pins { + amlogic,setmask = <0x6 0x31c>; + amlogic,clrmask = <0x6 0xcc3 0x10 0x1800>; + amlogic,pins = "CARD_1", "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4b>; + phandle = <0x4b>; + }; + + sd_to_ao_uart_pins { + amlogic,setmask = <0x10 0x1800>; + amlogic,clrmask = <0x6 0x300>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4c>; + phandle = <0x4c>; + }; + + ao_to_sd_uart_pins { + amlogic,setmask = <0x6 0x300>; + amlogic,clrmask = <0x10 0x1800 0x6 0xcc3>; + amlogic,pins = "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4d>; + phandle = <0x4d>; + }; + + ao_to_sd_jtag_pins { + amlogic,setmask = <0x6 0x300>; + amlogic,clrmask = <0x6 0xcff 0x10 0x1800>; + amlogic,pins = "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4e>; + phandle = <0x4e>; + }; + + sd_to_ao_jtag_pins { + amlogic,setmask = <0x10 0x1800>; + amlogic,clrmask = <0x6 0xfc0>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4f>; + phandle = <0x4f>; + }; + + emmc_clk_cmd_pins { + amlogic,setmask = <0x7 0x60000000>; + amlogic,clrmask = <0x7 0xe0>; + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x43>; + phandle = <0x43>; + }; + + emmc_conf_pull_up { + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_10"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x44>; + phandle = <0x44>; + }; + + emmc_conf_pull_done { + amlogic,pins = "BOOT_15"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x45>; + phandle = <0x45>; + }; + + emmc_all_pins { + amlogic,setmask = <0x7 0xf0000000>; + amlogic,clrmask = <0x7 0xe0>; + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_10", "BOOT_15"; + amlogic,enable-output = <0x1>; + linux,phandle = <0x46>; + phandle = <0x46>; + }; + + sdio_clk_cmd_pins { + amlogic,setmask = <0x5 0xc000000>; + amlogic,pins = "GPIOX_4", "GPIOX_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x50>; + phandle = <0x50>; + }; + + sdio_all_pins { + amlogic,setmask = <0x5 0xfc000000>; + amlogic,pins = "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", "GPIOX_4", "GPIOX_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x51>; + phandle = <0x51>; + }; + + conf_nand_pulldown { + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_15"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x52>; + phandle = <0x52>; + }; + + conf_nand_pullup { + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x53>; + phandle = <0x53>; + }; + + all_nand_pins { + amlogic,setmask = <0x7 0x800000ff>; + amlogic,clrmask = <0x7 0x70ffbc00>; + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_9", "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14", "BOOT_15"; + amlogic,enable-output = <0x1>; + linux,phandle = <0x54>; + phandle = <0x54>; + }; + + nand_cs { + amlogic,setmask = <0x7 0xc0>; + amlogic,clrmask = <0x7 0x40040000>; + amlogic,pins = "BOOT_8", "BOOT_9"; + linux,phandle = <0x55>; + phandle = <0x55>; + }; + + hdmitx_hpd { + amlogic,setmask = <0x6 0x80000000>; + amlogic,pins = "GPIOH_0"; + linux,phandle = <0x65>; + phandle = <0x65>; + }; + + hdmitx_ddc { + amlogic,setmask = <0x6 0x30000000>; + amlogic,pins = "GPIOH_1", "GPIOH_2"; + linux,phandle = <0x66>; + phandle = <0x66>; + }; + + hdmitx_aocec { + amlogic,setmask = <0x10 0x8000>; + amlogic,clrmask = <0x10 0x24000 0x11 0x1>; + amlogic,pins = "GPIOAO_8"; + linux,phandle = <0x67>; + phandle = <0x67>; + }; + + hdmitx_eecec { + amlogic,setmask = <0x10 0x4000>; + amlogic,clrmask = <0x10 0x28000 0x11 0x1>; + amlogic,pins = "GPIOAO_8"; + }; + + ao_i2c { + amlogic,setmask = <0x10 0x60>; + amlogic,clrmask = <0x10 0x1800006>; + amlogic,pins = "GPIOAO_4", "GPIOAO_5"; + linux,phandle = <0x1b>; + phandle = <0x1b>; + }; + + a_i2c { + amlogic,setmask = <0x1 0xc000>; + amlogic,clrmask = <0x3 0x18 0x2 0x18000 0x2 0xc0 0x1 0x600000>; + amlogic,pins = "GPIODV_24", "GPIODV_25"; + linux,phandle = <0x1c>; + phandle = <0x1c>; + }; + + b_i2c { + amlogic,setmask = <0x1 0x3000>; + amlogic,clrmask = <0x2 0x6000 0x1 0x1c0000>; + amlogic,pins = "GPIODV_26", "GPIODV_27"; + linux,phandle = <0x1d>; + phandle = <0x1d>; + }; + + c_i2c { + amlogic,setmask = <0x1 0xc00>; + amlogic,clrmask = <0x2 0x1800 0x1 0x200 0x2 0x20>; + amlogic,pins = "GPIODV_28", "GPIODV_29"; + linux,phandle = <0x1e>; + phandle = <0x1e>; + }; + + c_i2c_pin1 { + amlogic,setmask = <0x1 0x30000>; + amlogic,clrmask = <0x1 0x2000000 0x3 0x20>; + amlogic,pins = "GPIODV_18", "GPIODV_19"; + }; + + d_i2c { + amlogic,setmask = <0x5 0x30>; + amlogic,clrmask = <0x5 0x300c03 0x6 0x3>; + amlogic,pins = "GPIOX_10", "GPIOX_11"; + linux,phandle = <0x1f>; + phandle = <0x1f>; + }; + + spicc_pins_z11z12z13 { + amlogic,setmask = <0x4 0x1c>; + amlogic,clrmask = <0x3 0x800 0x4 0x1c00>; + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + }; + + spicc_pulldown_z11z12z13 { + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + }; + + spicc_pullup_z11z12z13 { + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + }; + + spicc_pins_x8x9x11 { + amlogic,setmask = <0x5 0xd>; + amlogic,clrmask = <0x5 0xd03430 0x6 0xd>; + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + }; + + spicc_pulldown_x8x9x11 { + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + }; + + spicc_pullup_x8x9x11 { + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + }; + + audio_pin { + amlogic,setmask = <0x6 0x7800000>; + amlogic,clrmask = <0x6 0x7e0000>; + amlogic,pins = "GPIOH_6", "GPIOH_7", "GPIOH_8", "GPIOH_9"; + linux,phandle = <0x70>; + phandle = <0x70>; + }; + + audio_pin1 { + amlogic,setmask = <0x6 0x10000000>; + amlogic,clrmask = <0x6 0x8000000>; + amlogic,pins = "GPIOH_4"; + linux,phandle = <0x6f>; + phandle = <0x6f>; + }; + + audio_btpcm_pins { + amlogic,setmask = <0x5 0xf00000>; + amlogic,clrmask = <0x5 0x3c33>; + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11"; + linux,phandle = <0x6e>; + phandle = <0x6e>; + }; + }; + + cpu_version { + reg = <0x0 0xc8100220 0x0 0x4>; + }; + + meson_clk_msr { + compatible = "amlogic, gxl_measure"; + reg = <0x0 0xc110875c 0x0 0x4 0x0 0xc1108764 0x0 0x4>; + }; + + i2c@c8100500 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-AO"; + status = "disabled"; + reg = <0x0 0xc8100500 0x0 0x1d>; + device_id = <0x0>; + pinctrl-names = "default"; + pinctrl-0 = <0x1b>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c1108500 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-A"; + status = "disabled"; + reg = <0x0 0xc1108500 0x0 0x20>; + device_id = <0x1>; + pinctrl-names = "default"; + pinctrl-0 = <0x1c>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c11087c0 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-B"; + status = "okay"; + reg = <0x0 0xc11087c0 0x0 0x20>; + device_id = <0x2>; + pinctrl-names = "default"; + pinctrl-0 = <0x1d>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x186a0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + + khadas-hym8563 { + compatible = "khadas-hym8563"; + reg = <0x51>; + }; + }; + + i2c@c11087e0 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-C"; + status = "disabled"; + reg = <0x0 0xc11087e0 0x0 0x20>; + device_id = <0x3>; + pinctrl-names = "default"; + pinctrl-0 = <0x1e>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c1108d20 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-D"; + status = "disabled"; + reg = <0x0 0xc1108d20 0x0 0x20>; + device_id = <0x4>; + pinctrl-names = "default"; + pinctrl-0 = <0x1f>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + efuse { + compatible = "amlogic, efuse"; + read_cmd = <0x82000030>; + write_cmd = <0x82000031>; + get_max_cmd = <0x82000033>; + key = <0x20>; + resets = <0x6 0x3e>; + reset-names = "efuse_clk"; + status = "ok"; + }; + + efusekey { + keynum = <0x4>; + key0 = <0x21>; + key1 = <0x22>; + key2 = <0x23>; + key3 = <0x24>; + linux,phandle = <0x20>; + phandle = <0x20>; + + key_0 { + keyname = "mac"; + offset = <0x0>; + size = <0xc>; + linux,phandle = <0x21>; + phandle = <0x21>; + }; + + key_1 { + keyname = "mac_bt"; + offset = <0xc>; + size = <0xc>; + linux,phandle = <0x22>; + phandle = <0x22>; + }; + + key_2 { + keyname = "mac_wifi"; + offset = <0x18>; + size = <0xc>; + linux,phandle = <0x23>; + phandle = <0x23>; + }; + + key_3 { + keyname = "usid"; + offset = <0x24>; + size = <0xc>; + linux,phandle = <0x24>; + phandle = <0x24>; + }; + }; + + mhu@c883c400 { + compatible = "amlogic, meson_mhu"; + reg = <0x0 0xc883c400 0x0 0x4c 0x0 0xc8013000 0x0 0x800>; + interrupts = <0x0 0xd1 0x8 0x0 0xd2 0x8>; + #mbox-cells = <0x1>; + mbox-names = "cpu_to_scp_low", "cpu_to_scp_high"; + mboxes = <0x25 0x0 0x25 0x1>; + linux,phandle = <0x25>; + phandle = <0x25>; + }; + + scpi_clocks { + compatible = "arm,scpi-clks"; + + scpi_clocks@0 { + compatible = "arm,scpi-clk-indexed"; + #clock-cells = <0x1>; + clock-indices = <0x0 0x1>; + clock-output-names = "vbig", "vlittle"; + linux,phandle = <0x15>; + phandle = <0x15>; + }; + }; + + rc@c8100580 { + compatible = "amlogic, aml_remote"; + dev_name = "meson-remote"; + reg = <0x0 0xc8100580 0x0 0x44 0x0 0xc8100480 0x0 0x20>; + status = "okay"; + protocol = <0x1>; + interrupts = <0x0 0xc4 0x1>; + pinctrl-names = "default"; + pinctrl-0 = <0x26>; + map = <0x27>; + max_frame_time = <0xc8>; + }; + + custom_maps { + mapnum = <0x4>; + map0 = <0x28>; + map1 = <0x29>; + map2 = <0x2a>; + map3 = <0x2b>; + linux,phandle = <0x27>; + phandle = <0x27>; + + map_0 { + mapname = "amlogic-remote-1"; + customcode = <0xfb04>; + release_delay = <0x50>; + size = <0x2c>; + keymap = <0x47000b 0x130002 0x100003 0x110004 0xf0005 0xc0006 0xd0007 0xb0008 0x80009 0x9000a 0x5c0061 0x510041 0x49000e 0x60082 0x140083 0x440067 0x1d006c 0x1c0069 0x48006a 0x53007d 0x450068 0x19006d 0x160066 0x520077 0x5007a 0x59007b 0x1b0078 0x40079 0x1a0074 0xa000f 0xe0071 0x15003f 0x1f0066 0x1e0084 0x70085 0x120086 0x540087 0x20088 0x4f001e 0x420030 0x5d002e 0x4c0020 0x580089 0x55008c>; + linux,phandle = <0x28>; + phandle = <0x28>; + }; + + map_1 { + mapname = "amlogic-remote-2"; + customcode = <0xfe01>; + release_delay = <0x50>; + size = <0x35>; + keymap = <0x10002 0x20003 0x30004 0x40005 0x50006 0x60007 0x70008 0x80009 0x9000a 0xa000b 0x1f01d2 0x15008b 0x16000f 0xc0192 0xd0193 0xe0073 0xf0072 0x110066 0x1c006a 0x1b0069 0x190067 0x1a006c 0x1d001c 0x170071 0x4900db 0x43009e 0x1201d5 0x1401d6 0x1801d7 0x590166 0x5a00a6 0x100074 0x4200a5 0x4400a3 0x1e00a8 0x4b00d0 0x5800a4 0x460082 0x400083 0x380046 0x5701d0 0x5b01d1 0x54018e 0x4c018f 0x4e0190 0x550191 0x5300ed 0x5200ee 0x3900d4 0x4100d5 0xb00d6 0xd8 0x1300d9>; + linux,phandle = <0x29>; + phandle = <0x29>; + }; + + map_2 { + mapname = "amlogic-remote-3"; + customcode = <0xbd02>; + release_delay = <0x50>; + size = <0x11>; + keymap = <0xca0067 0xd2006c 0x990069 0xc1006a 0xce0061 0x450074 0xc50085 0x800071 0xd0000f 0xd6007d 0x950066 0xdd0068 0x8c006d 0x890083 0x9c0082 0x9a0078 0xcd0079>; + linux,phandle = <0x2a>; + phandle = <0x2a>; + }; + + map_3 { + mapname = "khadas-ir"; + customcode = <0xff00>; + release_delay = <0x50>; + fn_key_scancode = <0x5c>; + fn_key_scancode_other = <0x5b>; + cursor_left_scancode = <0xe>; + cursor_right_scancode = <0x1a>; + cursor_up_scancode = <0x3>; + cursor_down_scancode = <0x2>; + cursor_ok_scancode = <0x7>; + size = <0xd>; + keymap = <0x140074 0x13008b 0x30067 0x2006c 0xe0069 0x1a006a 0x700e8 0x580072 0x5c003f 0x5b003f 0xb0073 0x1009e 0x480066>; + linux,phandle = <0x2b>; + phandle = <0x2b>; + }; + }; + + rng { + compatible = "amlogic,meson-rng"; + reg = <0x0 0xc8834000 0x0 0x4>; + }; + + audio_data { + compatible = "amlogic, audio_data"; + query_licence_cmd = <0x82000050>; + status = "okay"; + }; + + saradc { + compatible = "amlogic, saradc"; + status = "okay"; + interrupts = <0x0 0x9 0x1>; + interrupt-names = "saradc_int"; + clocks = <0x6 0x2>; + clock-names = "saradc_clk"; + resets = <0x6 0x56>; + reg = <0x0 0xc1108680 0x0 0x30 0x0 0xc883c3d8 0x0 0x8>; + }; + + defendkey { + compatible = "amlogic, defendkey"; + reg = <0x0 0xc8834500 0x0 0x4>; + mem_size = <0x0 0x100000>; + status = "okay"; + }; + + spicc { + compatible = "amlogic, spicc"; + status = "disabled"; + reg = <0x0 0xc1108d80 0x0 0x28>; + resets = <0x6 0x8>; + reset-names = "spicc_clk"; + clocks = <0x6 0xa>; + clock-names = "clk81"; + interrupts = <0x0 0x51 0x1>; + device_id = <0x0>; + }; + + aml_aes { + compatible = "amlogic,aes_dma"; + dev_name = "aml_aes_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aml_tdes { + compatible = "amlogic,des_dma,tdes_dma"; + dev_name = "aml_tdes_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aml_sha { + compatible = "amlogic,sha_dma"; + dev_name = "aml_sha_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + meson-pwm { + compatible = "amlogic, meson-pwm"; + status = "okay"; + #pwm-cells = <0x2>; + pwm-outputs = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf>; + reg = <0x0 0xc1108550 0x0 0x1c 0x0 0xc1108640 0x0 0x1c 0x0 0xc11086c0 0x0 0x1c 0x0 0xc8100550 0x0 0x1c>; + clocks = <0x6 0x2 0x6 0x5 0x6 0x9 0x6 0x8>; + clock-names = "xtal", "vid_pll_clk", "fclk_div4", "fclk_div3"; + clock-select = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0>; + }; + + partitions { + parts = <0x1>; + part-0 = <0x2c>; + + linux { + pname = "linux"; + size = <0xffffffff 0xffffffff>; + mask = <0x4>; + linux,phandle = <0x2c>; + phandle = <0x2c>; + }; + + }; + + aliases { + serial0 = "/serial@c81004c0"; + serial1 = "/serial@c11084c0"; + serial2 = "/serial@c11084dc"; + serial3 = "/serial@c1108700"; + serial4 = "/serial@c81004e0"; + }; + + memory@00000000 { + device_type = "memory"; + linux,usable-memory-2g = <0x0 0x100000 0x0 0x7ff00000>; + linux,usable-memory-3g = <0x0 0x100000 0x0 0xbff00000>; + }; + + reserved-memory { + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + linux,secmon { + compatible = "amlogic, aml_secmon_memory"; + reg = <0x0 0x10000000 0x0 0x200000>; + no-map; + linux,phandle = <0x18>; + phandle = <0x18>; + }; + + linux,secos { + status = "disable"; + compatible = "amlogic, aml_secos_memory"; + reg = <0x0 0x5300000 0x0 0x2000000>; + no-map; + }; + + aml_pstore { + compatible = "amlogic, pstore"; + reg = <0x0 0x7300000 0x0 0x100000>; + no-map; + }; + + linux,di { + compatible = "amlogic, di-mem"; + size = <0x0 0x1e00000>; + linux,phandle = <0x3f>; + phandle = <0x3f>; + }; + + linux,ion-dev { + compatible = "amlogic, idev-mem"; + size = <0x0 0x4000000>; + linux,phandle = <0x3c>; + phandle = <0x3c>; + }; + + linux,vdin1_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x1000000>; + alignment = <0x0 0x400000>; + linux,phandle = <0x40>; + phandle = <0x40>; + }; + + linux,ppmgr { + compatible = "shared-dma-pool"; + size = <0x0 0x0>; + linux,phandle = <0x3e>; + phandle = <0x3e>; + }; + + linux,codec_mm_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0xc000000>; + alignment = <0x0 0x400000>; + linux,contiguous-region; + linux,phandle = <0x39>; + phandle = <0x39>; + }; + + linux,picdec { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x0>; + alignment = <0x0 0x0>; + linux,contiguous-region; + linux,phandle = <0x3d>; + phandle = <0x3d>; + }; + + linux,codec_mm_reserved { + compatible = "amlogic, codec-mm-reserved"; + size = <0x0 0x4100000>; + alignment = <0x0 0x100000>; + linux,phandle = <0x3a>; + phandle = <0x3a>; + }; + }; + + sysled { + compatible = "amlogic, sysled"; + dev_name = "sysled"; + status = "okay"; + led_gpio = <0x37 0x9 0x0>; + led_active_low = <0x1>; + }; + + fan { + compatible = "fanctl"; + fan_ctl0 = <0x38 0x3f 0x0>; + fan_ctl1 = <0x38 0x40 0x0>; + trig_temp_level0 = <0x32>; + trig_temp_level1 = <0x3c>; + trig_temp_level2 = <0x46>; + }; + + meson-vout { + compatible = "amlogic, meson-vout"; + dev_name = "meson-vout"; + status = "okay"; + }; + + meson-fb { + compatible = "amlogic, meson-fb"; + dev_name = "meson-fb"; + status = "okay"; + interrupts = <0x0 0x3 0x1 0x0 0x59 0x1>; + interrupt-names = "viu-vsync", "rdma"; + mem_size = <0x1851000 0x100000>; + display_mode_default = "1080p60hz"; + scale_mode = <0x1>; + display_size_default = <0x780 0x438 0x780 0xca8 0x20>; + logo_addr_2g = "0x7d851000"; + logo_addr_3g = "0xbd851000"; + }; + + ge2d { + compatible = "amlogic, ge2d"; + dev_name = "ge2d"; + status = "okay"; + interrupts = <0x0 0x96 0x1>; + interrupt-names = "ge2d"; + clocks = <0x6 0x17 0x6 0x19>; + clock-names = "clk_vapb_0", "clk_ge2d"; + resets = <0x6 0x34>; + reset-names = "ge2d"; + }; + + codec_io { + compatible = "amlogic, codec_io"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_cbus_base { + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + + io_dos_base { + reg = <0x0 0xc8820000 0x0 0x10000>; + }; + + io_hiubus_base { + reg = <0x0 0xc883c000 0x0 0x2000>; + }; + + io_aobus_base { + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + + io_vcbus_base { + reg = <0x0 0xd0100000 0x0 0x40000>; + }; + + io_dmc_base { + reg = <0x0 0xc8838000 0x0 0x400>; + }; + }; + + codec_mm { + compatible = "amlogic, codec, mm"; + memory-region = <0x39 0x3a>; + dev_name = "codec_mm"; + status = "okay"; + }; + + ethernet@0xc9410000 { + compatible = "amlogic, gxbb-rgmii-dwmac"; + reg = <0x0 0xc9410000 0x0 0x10000 0x0 0xc8834540 0x0 0x8 0x0 0xc8834558 0x0 0xc>; + interrupts = <0x0 0x8 0x1>; + phy-mode = "rgmii"; + pinctrl-names = "external_eth_pins"; + pinctrl-0 = <0x3b>; + rst_pin-gpios = <0x38 0xe 0x0>; + GPIOZ4_pin-gpios = <0x38 0x4 0x0>; + GPIOZ5_pin-gpios = <0x38 0x5 0x0>; + mc_val = <0x1621>; + cali_val = <0x20000>; + resets = <0x6 0x23>; + reset-names = "ethpower"; + interrupt-names = "macirq"; + clocks = <0x6 0xa>; + clock-names = "ethclk81"; + internal_phy = <0x0>; + }; + + mesonstream { + compatible = "amlogic, codec, streambuf"; + dev_name = "mesonstream"; + status = "okay"; + resets = <0x6 0x39 0x6 0x59 0x6 0x24 0x6 0x1>; + reset-names = "parser_top", "vpu_intr", "demux", "vdec"; + }; + + amvideocap { + compatible = "amlogic, amvideocap"; + dev_name = "amvideocap.0"; + status = "okay"; + max_size = <0x8>; + }; + + ion_dev { + compatible = "amlogic, ion_dev"; + memory-region = <0x3c>; + }; + + vdec { + compatible = "amlogic, vdec"; + dev_name = "vdec.0"; + status = "okay"; + interrupts = <0x0 0x3 0x1 0x0 0x17 0x1 0x0 0x20 0x1 0x0 0x2b 0x1 0x0 0x2c 0x1 0x0 0x2d 0x1>; + interrupt-names = "vsync", "demux", "parser", "mailbox_0", "mailbox_1", "mailbox_2"; + }; + + picdec { + compatible = "amlogic, picdec"; + memory-region = <0x3d>; + dev_name = "picdec"; + status = "okay"; + }; + + ppmgr { + compatible = "amlogic, ppmgr"; + memory-region = <0x3e>; + dev_name = "ppmgr"; + status = "okay"; + }; + + deinterlace { + compatible = "amlogic, deinterlace"; + status = "okay"; + memory-region = <0x3f>; + interrupts = <0x0 0x2e 0x1 0x0 0x6 0x1>; + interrupt-names = "de_irq", "timerc"; + buffer-size = <0x2fd000>; + hw-version = <0x2>; + }; + + vdin0 { + compatible = "amlogic, vdin"; + dev_name = "vdin0"; + status = "ok"; + reserve-iomap = "true"; + flag_cma = <0x1>; + cma_size = <0x10>; + interrupts = <0x0 0x53 0x1>; + rdma-irq = <0x2>; + clocks = <0x6 0x11 0x6 0x29>; + clock-names = "fclk_div5", "cts_vdin_meas_clk"; + vdin_id = <0x0>; + tv_bit_mode = <0x1>; + }; + + vdin1 { + compatible = "amlogic, vdin"; + memory-region = <0x40>; + dev_name = "vdin1"; + status = "ok"; + reserve-iomap = "true"; + flag_cma = <0x0>; + interrupts = <0x0 0x55 0x1>; + rdma-irq = <0x4>; + clocks = <0x6 0x11 0x6 0x29>; + clock-names = "fclk_div5", "cts_vdin_meas_clk"; + vdin_id = <0x1>; + tv_bit_mode = <0x1>; + }; + + amvdec_656in0 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in0"; + status = "ok"; + reg = <0x0 0xd0048000 0x0 0x7c>; + clocks = <0x6 0x7 0x6 0x26>; + clock-names = "fclk_div2", "cts_bt656_clk0"; + bt656_id = <0x0>; + }; + + amvdec_656in1 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in1"; + status = "ok"; + reg = <0x0 0xd0050000 0x0 0x7c>; + clocks = <0x6 0x7 0x6 0x27>; + clock-names = "fclk_div2", "cts_bt656_clk1"; + bt656_id = <0x1>; + }; + + amlvecm { + compatible = "amlogic, vecm"; + dev_name = "aml_vecm"; + status = "okay"; + gamma_en = <0x0>; + wb_en = <0x0>; + cm_en = <0x0>; + }; + + amvenc_avc { + compatible = "amlogic, amvenc_avc"; + dev_name = "amvenc_avc"; + status = "okay"; + interrupts = <0x0 0x2d 0x1>; + interrupt-names = "mailbox_2"; + }; + + hevc_enc { + compatible = "cnm, HevcEnc"; + dev_name = "HevcEnc"; + status = "okay"; + interrupts = <0x0 0xbb 0x1>; + interrupt-names = "wave420l_irq"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_reg_base { + reg = <0x0 0xc8810000 0x0 0x4000>; + }; + }; + + vpu { + compatible = "amlogic, vpu"; + dev_name = "vpu"; + status = "ok"; + clk_level = <0x7>; + }; + + bt-dev { + compatible = "amlogic, bt-dev"; + dev_name = "bt-dev"; + status = "okay"; + gpio_reset = <0x38 0x60 0x0>; + }; + + rtc { + compatible = "amlogic, aml_vrtc"; + alarm_reg_addr = <0xc81000a8>; + timer_e_addr = <0xc1109988>; + init_date = "2015/01/01"; + status = "okay"; + }; + + wifi { + compatible = "amlogic, aml_wifi"; + dev_name = "aml_wifi"; + status = "okay"; + interrupt_pin = <0x38 0x56 0x0>; + interrupts = <0x0 0x44 0x4>; + irq_trigger_type = "GPIO_IRQ_LOW"; + power_on_pin = <0x38 0x55 0x0>; + dhd_static_buf; + pinctrl-names = "wifi_32k_pins"; + pinctrl-0 = <0x41>; + pwm_config = <0x42>; + }; + + wifi_pwm_conf { + pwm_channel1 = <0x4>; + pwm_channel2 = <0xc>; + pwm_channel1_conf = <0x774d 0x3ba6 0x6>; + pwm_channel2_conf = <0x7736 0x3b9b 0x9>; + linux,phandle = <0x42>; + phandle = <0x42>; + }; + + emmc { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0074000 0x0 0x2000>; + interrupts = <0x0 0xda 0x1>; + pinctrl-names = "emmc_clk_cmd_pins", "emmc_all_pins"; + pinctrl-0 = <0x43>; + pinctrl-1 = <0x44 0x45 0x46>; + + emmc { + status = "disabled"; + pinname = "emmc"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_8_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_1_8V_DDR", "MMC_CAP_HW_RESET", "MMC_CAP_ERASE", "MMC_CAP_CMD23"; + caps2 = "MMC_CAP2_HS200", "MMC_CAP2_HS400"; + f_min = <0x493e0>; + f_max = <0x5f5e100>; + max_req_size = <0x20000>; + gpio_dat3 = <0x38 0x1d 0x0>; + hw_reset = <0x38 0x23 0x0>; + card_type = <0x1>; + }; + }; + + sd { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0072000 0x0 0x2000>; + interrupts = <0x0 0xd9 0x1 0x0 0x43 0x1 0x0 0x45 0x1>; + pinctrl-names = "sd_clk_cmd_pins", "sd_all_pins", "sd_1bit_pins", "sd_clk_cmd_uart_pins", "sd_1bit_uart_pins", "sd_to_ao_uart_pins", "ao_to_sd_uart_pins", "ao_to_sd_jtag_pins", "sd_to_ao_jtag_pins"; + pinctrl-0 = <0x47>; + pinctrl-1 = <0x48>; + pinctrl-2 = <0x49>; + pinctrl-3 = <0x4a>; + pinctrl-4 = <0x4b>; + pinctrl-5 = <0x4c>; + pinctrl-6 = <0x4d>; + pinctrl-7 = <0x4e>; + pinctrl-8 = <0x4f>; + + sd { + status = "okay"; + pinname = "sd"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_4_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED"; + f_min = <0x61a80>; + f_max = <0x5f5e100>; + max_req_size = <0x20000>; + gpio_dat3 = <0x38 0x2e 0x0>; + jtag_pin = <0x38 0x2a 0x0>; + gpio_cd = <0x38 0x30 0x0>; + card_in_delay = <0x190>; + irq_in = <0x3>; + irq_out = <0x5>; + card_type = <0x5>; + }; + }; + + sdio { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0070000 0x0 0x2000>; + interrupts = <0x0 0xd8 0x1>; + pinctrl-names = "sdio_clk_cmd_pins", "sdio_all_pins"; + pinctrl-0 = <0x50>; + pinctrl-1 = <0x51>; + + sdio { + status = "okay"; + pinname = "sdio"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_4_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_UHS_SDR12", "MMC_CAP_UHS_SDR25", "MMC_CAP_UHS_SDR50", "MMC_CAP_UHS_SDR104", "MMC_PM_KEEP_POWER"; + f_min = <0x61a80>; + f_max = <0xbebc200>; + max_req_size = <0x20000>; + card_type = <0x3>; + }; + }; + + nand { + compatible = "amlogic, aml_nand"; + dev_name = "nand"; + status = "disabled"; + reg = <0x0 0xd0074800 0x0 0x200>; + interrupts = <0x0 0x22 0x1>; + pinctrl-names = "nand_rb_mod", "nand_norb_mod", "nand_cs_pins_only"; + pinctrl-0 = <0x52 0x53 0x54>; + pinctrl-1 = <0x52 0x53 0x54>; + pinctrl-2 = <0x55>; + device_id = <0x0>; + plat-names = "nandnormal"; + plat-num = <0x1>; + plat-part-0 = <0x56>; + + normal { + enable_pad = "ce0", "ce1", "ce2", "ce3"; + busy_pad = "rb0"; + linux,phandle = <0x56>; + phandle = <0x56>; + }; + }; + + aml_nftl { + compatible = "amlogic, nftl"; + }; + + unifykey { + compatible = "amlogic, unifykey"; + status = "ok"; + unifykey-num = <0xe>; + unifykey-index-0 = <0x57>; + unifykey-index-1 = <0x58>; + unifykey-index-2 = <0x59>; + unifykey-index-3 = <0x5a>; + unifykey-index-4 = <0x5b>; + unifykey-index-5 = <0x5c>; + unifykey-index-6 = <0x5d>; + unifykey-index-7 = <0x5e>; + unifykey-index-8 = <0x5f>; + unifykey-index-9 = <0x60>; + unifykey-index-10 = <0x61>; + unifykey-index-11 = <0x62>; + unifykey-index-12 = <0x63>; + unifykey-index-13 = <0x64>; + + key_0 { + key-name = "usid"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x57>; + phandle = <0x57>; + }; + + key_1 { + key-name = "mac"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x58>; + phandle = <0x58>; + }; + + key_2 { + key-name = "hdcp"; + key-device = "secure"; + key-type = "sha1"; + key-permit = "read", "write", "del"; + linux,phandle = <0x59>; + phandle = <0x59>; + }; + + key_3 { + key-name = "secure_boot_set"; + key-device = "efuse"; + key-permit = "write"; + linux,phandle = <0x5a>; + phandle = <0x5a>; + }; + + key_4 { + key-name = "mac_bt"; + key-device = "normal"; + key-permit = "read", "write", "del"; + key-type = "mac"; + linux,phandle = <0x5b>; + phandle = <0x5b>; + }; + + key_5 { + key-name = "mac_wifi"; + key-device = "normal"; + key-permit = "read", "write", "del"; + key-type = "mac"; + linux,phandle = <0x5c>; + phandle = <0x5c>; + }; + + key_6 { + key-name = "hdcp2_tx"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5d>; + phandle = <0x5d>; + }; + + key_7 { + key-name = "hdcp2_rx"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5e>; + phandle = <0x5e>; + }; + + key_8 { + key-name = "widevinekeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5f>; + phandle = <0x5f>; + }; + + key_9 { + key-name = "deviceid"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x60>; + phandle = <0x60>; + }; + + key_10 { + key-name = "hdcp22_fw_private"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x61>; + phandle = <0x61>; + }; + + key_11 { + key-name = "PlayReadykeybox25"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x62>; + phandle = <0x62>; + }; + + key_12 { + key-name = "prpubkeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x63>; + phandle = <0x63>; + }; + + key_13 { + key-name = "prprivkeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x64>; + phandle = <0x64>; + }; + }; + + amhdmitx { + compatible = "amlogic, amhdmitx"; + dev_name = "amhdmitx"; + status = "okay"; + pinctrl-names = "hdmitx_hpd", "hdmitx_ddc"; + pinctrl-0 = <0x65>; + pinctrl-1 = <0x66>; + interrupts = <0x0 0x39 0x1>; + interrupt-names = "hdmitx_hpd"; + clocks = <0x6 0xb 0x6 0xc 0x6 0xd 0x6 0xe 0x6 0xf 0x6 0x16>; + clock-names = "hdmitx_clk_sys", "hdmitx_clk_encp", "hdmitx_clk_enci", "hdmitx_clk_pixel", "hdmitx_clk_phy", "hdmitx_clk_vid"; + gpio_i2c_en = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + }; + + aocec { + compatible = "amlogic, amlogic-aocec"; + device_name = "aocec"; + status = "okay"; + vendor_name = "Amlogic"; + vendor_id = <0x0>; + product_desc = "GXBB Mbox"; + cec_osd_string = "MBox"; + port_num = <0x1>; + arc_port_mask = <0x0>; + interrupts = <0x0 0xc7 0x1>; + interrupt-names = "hdmi_aocec"; + pinctrl-names = "hdmitx_aocec"; + pinctrl-0 = <0x67>; + reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + }; + + tvout { + compatible = "amlogic, tvout"; + dev_name = "tvout"; + status = "okay"; + }; + + i2c_gpio { + compatible = "i2c-gpio"; + status = "okay"; + dev_name = "i2c-gpio"; + i2c-gpio,delay-us = <0xa>; + gpios = <0x38 0x11 0x0 0x38 0x12 0x0>; + #address-cells = <0x2>; + #size-cells = <0x2>; + i2c-gpio,timeout-ms = <0xa>; + + i2c_gpio_edid { + compatible = "i2c-gpio-edid"; + reg = <0x50 0x0 0x0 0x0>; + }; + }; + + serial@c81004c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004c0 0x0 0x18>; + interrupts = <0x0 0xc1 0x1>; + status = "okay"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + xtal_tick_en = <0x1>; + fifosize = <0x40>; + pinctrl-names = "default"; + support-sysrq = <0x0>; + }; + + serial@c11084c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084c0 0x0 0x18>; + interrupts = <0x0 0x1a 0x1>; + status = "okay"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x80>; + pinctrl-names = "default"; + pinctrl-0 = <0x68>; + resets = <0x6 0xd>; + }; + + serial@c11084dc { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084dc 0x0 0x18>; + interrupts = <0x0 0x4b 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x69>; + resets = <0x6 0x30>; + }; + + serial@c1108700 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc1108700 0x0 0x18>; + interrupts = <0x0 0x5d 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x6a>; + resets = <0x6 0x4f>; + }; + + serial@c81004e0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004e0 0x0 0x18>; + interrupts = <0x0 0xc5 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x6b>; + }; + + canvas { + compatible = "amlogic, meson, canvas"; + dev_name = "amlogic-canvas"; + status = "ok"; + reg = <0x0 0xc8838000 0x0 0x400>; + }; + + rdma { + compatible = "amlogic, meson, rdma"; + dev_name = "amlogic-rdma"; + status = "ok"; + interrupts = <0x0 0x59 0x1>; + interrupt-names = "rdma"; + }; + + dwc3@c9000000 { + compatible = "synopsys, dwc3"; + reg = <0x0 0xc9000000 0x0 0x100000>; + interrupts = <0x0 0x1e 0x4>; + usb-phy = <0x6c 0x6d>; + cpu-type = "gxl"; + clock-src = "usb3.0"; + }; + + usb2phy@d0078000 { + compatible = "amlogic, amlogic-new-usb2"; + portnum = <0x3>; + reg = <0x0 0xd0078000 0x0 0x80>; + linux,phandle = <0x6c>; + phandle = <0x6c>; + }; + + usb3phy@d0078080 { + compatible = "amlogic, amlogic-new-usb3"; + portnum = <0x0>; + reg = <0x0 0xd0078080 0x0 0x20>; + interrupts = <0x0 0x10 0x4>; + otg = <0x1>; + gpio-vbus-power = "GPIOAO_5"; + gpios = <0x37 0x5 0x0>; + linux,phandle = <0x6d>; + phandle = <0x6d>; + }; + + dwc2_a { + compatible = "amlogic,dwc2"; + device_name = "dwc2_a"; + reg = <0x0 0xc9100000 0x0 0x40000>; + status = "okay"; + interrupts = <0x0 0x1f 0x4>; + pl-periph-id = <0x0>; + clock-src = "usb0"; + port-id = <0x0>; + port-type = <0x2>; + port-speed = <0x0>; + port-config = <0x0>; + port-dma = <0x0>; + port-id-mode = <0x0>; + usb-fifo = <0x2d8>; + cpu-type = "gxl"; + controller-type = <0x2>; + phy-reg = <0xd0078000>; + phy-reg-size = <0xa0>; + resets = <0x6 0x3a 0x6 0x48 0x6 0x36>; + reset-names = "usb_general", "usb1", "usb1_to_ddr"; + }; + + I2S { + #sound-dai-cells = <0x0>; + resets = <0x6 0x26 0x6 0x12 0x6 0x28 0x6 0x29 0x6 0x2a 0x6 0x2b 0x6 0x2c 0x6 0x2d 0x6 0x2f 0x6 0x8e 0x6 0x22>; + reset-names = "top_glue", "aud_buf", "i2s_out", "amclk_measure", "aififo2", "aud_mixer", "mixer_reg", "adc", "top_level", "aoclk", "aud_in"; + clocks = <0x6 0x21 0x6 0x22>; + clock-names = "mpll2", "mclk"; + compatible = "amlogic, aml-i2s-dai"; + linux,phandle = <0x79>; + phandle = <0x79>; + }; + + SPDIF { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-spdif-dai"; + resets = <0x6 0x27 0x6 0x90>; + reset-names = "iec958", "iec958_amclk"; + clocks = <0x6 0x20 0x6 0x24 0x6 0x22 0x6 0x25 0x6 0xa>; + clock-names = "mpll1", "i958", "mclk", "spdif", "clk_81"; + linux,phandle = <0x7a>; + phandle = <0x7a>; + }; + + PCM { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-pcm-dai"; + pinctrl-names = "aml_audio_btpcm"; + pinctrl-0 = <0x6e>; + clocks = <0x6 0x1f 0x6 0x2a 0x6 0x2b>; + clock-names = "mpll0", "pcm_mclk", "pcm_sclk"; + pcm_mode = <0x1>; + linux,phandle = <0x7b>; + phandle = <0x7b>; + }; + + i2s_platform { + compatible = "amlogic, aml-i2s"; + interrupts = <0x0 0x1d 0x1>; + linux,phandle = <0x77>; + phandle = <0x77>; + }; + + pcm_platform { + compatible = "amlogic, aml-pcm"; + linux,phandle = <0x78>; + phandle = <0x78>; + }; + + spdif_codec { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-spdif-codec"; + pinctrl-names = "aml_audio_spdif"; + pinctrl-0 = <0x6f>; + linux,phandle = <0x7d>; + phandle = <0x7d>; + }; + + pcm_codec { + #sound-dai-cells = <0x0>; + compatible = "amlogic, pcm2BT-codec"; + linux,phandle = <0x7e>; + phandle = <0x7e>; + }; + + dummy { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml_dummy_codec"; + status = "disable"; + }; + + t9015 { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml_codec_T9015"; + reg = <0x0 0xc8832000 0x0 0x14>; + status = "okay"; + linux,phandle = <0x7c>; + phandle = <0x7c>; + }; + + aml_m8_snd { + compatible = "aml, aml_snd_m8"; + status = "okay"; + aml-sound-card,format = "i2s"; + aml_sound_card,name = "AML-M8AUDIO"; + aml,audio-routing = "Ext Spk", "LOUTL", "Ext Spk", "LOUTR"; + mute_gpio-gpios = <0x38 0x15 0x0>; + mute_inv; + hp_disable; + hp_paraments = <0x320 0x12c 0x0 0x5 0x1>; + pinctrl-names = "aml_snd_m8"; + pinctrl-0 = <0x70>; + cpu_list = <0x71 0x72 0x73>; + codec_list = <0x74 0x75 0x76>; + plat_list = <0x77 0x77 0x78>; + + cpudai0 { + sound-dai = <0x79>; + linux,phandle = <0x71>; + phandle = <0x71>; + }; + + cpudai1 { + sound-dai = <0x7a>; + linux,phandle = <0x72>; + phandle = <0x72>; + }; + + cpudai2 { + sound-dai = <0x7b>; + linux,phandle = <0x73>; + phandle = <0x73>; + }; + + codec0 { + sound-dai = <0x7c>; + linux,phandle = <0x74>; + phandle = <0x74>; + }; + + codec1 { + sound-dai = <0x7d>; + linux,phandle = <0x75>; + phandle = <0x75>; + }; + + codec2 { + sound-dai = <0x7e>; + linux,phandle = <0x76>; + phandle = <0x76>; + }; + }; + + gpio_keypad { + compatible = "amlogic, gpio_keypad"; + status = "okay"; + scan_period = <0x14>; + key_num = <0x1>; + key_name = "power"; + key_code = <0x74>; + key_pin = <0x37 0x2 0x0>; + irq_keyup = <0x6>; + irq_keydown = <0x7>; + }; + + adc_keypad { + compatible = "amlogic, adc_keypad"; + status = "okay"; + key_name = "home"; + key_num = <0x1>; + key_code = <0x66>; + key_chan = <0x0>; + key_val = <0xa>; + key_tolerance = <0x28>; + }; + + aml-sensor@0 { + compatible = "amlogic, aml-thermal"; + device_name = "thermal"; + #thermal-sensor-cells = <0x1>; + linux,phandle = <0x7f>; + phandle = <0x7f>; + + cooling_devices { + + cpufreq_cool_cluster0 { + min_state = <0xf4240>; + dyn_coeff = <0x8c>; + cluster_id = <0x0>; + node_name = "cluster0"; + device_type = "cpufreq"; + }; + + cpufreq_cool_cluster1 { + min_state = <0x7a120>; + dyn_coeff = <0x8c>; + cluster_id = <0x1>; + node_name = "cluster1"; + device_type = "cpufreq"; + }; + + cpucore_cool_cluster0 { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x0>; + node_name = "cpu_core_cluster0"; + device_type = "cpucore"; + }; + + cpucore_cool_cluster1 { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x1>; + node_name = "cpu_core_cluster1"; + device_type = "cpucore"; + }; + + gpufreq_cool { + min_state = <0x190>; + dyn_coeff = <0x1b5>; + cluster_id = <0x0>; + node_name = "t82x"; + device_type = "gpufreq"; + }; + + gpucore_cool { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x0>; + node_name = "thermal_gpu_cores"; + device_type = "gpucore"; + }; + }; + + cpu_core_cluster0 { + #cooling-cells = <0x2>; + linux,phandle = <0x83>; + phandle = <0x83>; + }; + + cpu_core_cluster1 { + #cooling-cells = <0x2>; + linux,phandle = <0x84>; + phandle = <0x84>; + }; + + thermal_gpu_cores { + #cooling-cells = <0x2>; + linux,phandle = <0x86>; + phandle = <0x86>; + }; + }; + + thermal-zones { + + soc_thermal { + polling-delay = <0x3e8>; + polling-delay-passive = <0x64>; + sustainable-power = <0x992>; + thermal-sensors = <0x7f 0x3>; + + trips { + + trip-point@0 { + temperature = <0x11170>; + hysteresis = <0x3e8>; + type = "passive"; + }; + + trip-point@1 { + temperature = <0x13880>; + hysteresis = <0x3e8>; + type = "passive"; + linux,phandle = <0x80>; + phandle = <0x80>; + }; + + trip-point@2 { + temperature = <0x14c08>; + hysteresis = <0x1388>; + type = "hot"; + }; + + trip-point@3 { + temperature = <0x3f7a0>; + hysteresis = <0x3e8>; + type = "critical"; + }; + }; + + cooling-maps { + + cpufreq_cooling_map0 { + trip = <0x80>; + cooling-device = <0x81 0x0 0x4>; + contribution = <0x400>; + }; + + cpufreq_cooling_map1 { + trip = <0x80>; + cooling-device = <0x82 0x0 0x4>; + contribution = <0x400>; + }; + + cpucore_cooling_map0 { + trip = <0x80>; + cooling-device = <0x83 0x0 0x3>; + contribution = <0x400>; + }; + + cpucore_cooling_map1 { + trip = <0x80>; + cooling-device = <0x84 0x0 0x3>; + contribution = <0x400>; + }; + + gpufreq_cooling_map { + trip = <0x80>; + cooling-device = <0x85 0x0 0x4>; + contribution = <0x400>; + }; + + gpucore_cooling_map { + trip = <0x80>; + cooling-device = <0x86 0x0 0x2>; + contribution = <0x400>; + }; + }; + }; + }; +}; diff --git a/arch/arm64/boot/dts/kvim2_multios.dts b/arch/arm64/boot/dts/kvim2_multios.dts new file mode 100644 index 0000000000000..cb763fa375695 --- /dev/null +++ b/arch/arm64/boot/dts/kvim2_multios.dts @@ -0,0 +1,2471 @@ +/dts-v1/; + +/ { + model = "Amlogic"; + compatible = "kvim"; + amlogic-dt-id = "kvim"; + interrupt-parent = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + + t82x { + compatible = "arm,malit602", "arm,malit60x", "arm,malit6xx", "arm,mali-midgard"; + #cooling-cells = <0x2>; + reg = <0x0 0xd00c0000 0x0 0x100000 0x0 0xc1104440 0x0 0x1000 0x0 0xc8100000 0x0 0x1000 0x0 0xc883c000 0x0 0x1000 0x0 0xc1104440 0x0 0x1000>; + interrupt-parent = <0x1>; + interrupts = <0x0 0xa0 0x4 0x0 0xa1 0x4 0x0 0xa2 0x4>; + interrupt-names = "GPU", "MMU", "JOB"; + num_of_pp = <0x3>; + sc_mpp = <0x1>; + operating-points = <0xa2c2a 0xf4240 0x7a120 0xf4240 0x61a80 0xf4240 0x45c12 0xf4240 0x3d090 0xf4240 0x1e848 0xf4240>; + tbl = <0x2 0x3 0x4 0x5 0x5>; + clocks = <0x6 0x8 0x6 0x9 0x6 0x11 0x6 0x12 0x6 0x1e 0x6 0x15 0x6 0x13 0x6 0x14>; + clock-names = "fclk_div3", "fclk_div4", "fclk_div5", "fclk_div7", "gp0_pll", "clk_gpu", "clk_gpu_0", "clk_gpu_1"; + linux,phandle = <0x85>; + phandle = <0x85>; + + clk125_cfg { + clk_freq = <0x7735940>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x1e 0x78>; + }; + + dvfs250_cfg { + clk_freq = <0xee6b280>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x50 0xaa>; + }; + + dvfs285_cfg { + clk_freq = <0x1107a650>; + clk_parent = "fclk_div7"; + clkp_freq = <0x1107a650>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x64 0xbe>; + linux,phandle = <0x2>; + phandle = <0x2>; + }; + + dvfs400_cfg { + clk_freq = <0x17d78400>; + clk_parent = "fclk_div5"; + clkp_freq = <0x17d78400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x98 0xcf>; + linux,phandle = <0x3>; + phandle = <0x3>; + }; + + dvfs500_cfg { + clk_freq = <0x1dcd6500>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xb4 0xdc>; + linux,phandle = <0x4>; + phandle = <0x4>; + }; + + dvfs666_cfg { + clk_freq = <0x27b25a80>; + clk_parent = "fclk_div3"; + clkp_freq = <0x27b25a80>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xd2 0xec>; + linux,phandle = <0x5>; + phandle = <0x5>; + }; + + dvfs800_cfg { + clk_freq = <0x2f34f600>; + clk_parent = "gp0_pll"; + clkp_freq = <0x2f34f600>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xe6 0xff>; + }; + }; + + gpu_clk@c883c00 { + compatible = "meson, gpu-clkgen-1.00.a"; + #clock-cells = <0x0>; + reg = <0x0 0xc883c000 0x0 0x1000>; + clocks = <0x6 0x8 0x6 0x9 0x6 0x11 0x6 0x12 0x6 0x1e 0x6 0x15 0x6 0x13 0x6 0x14>; + clock-names = "fclk_div3", "fclk_div4", "fclk_div5", "fclk_div7", "gp0_pll", "clk_gpu", "clk_gpu_0", "clk_gpu_1"; + clock-output-names = "clk_mali"; + tbl = <0x7 0x8 0x9 0xa 0xb 0xc>; + + clk125_cfg { + clk_freq = <0x7735940>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x1e 0x78>; + linux,phandle = <0x7>; + phandle = <0x7>; + }; + + clk250_cfg { + clk_freq = <0xee6b280>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x50 0xaa>; + linux,phandle = <0x8>; + phandle = <0x8>; + }; + + clk285_cfg { + clk_freq = <0x1107a650>; + clk_parent = "fclk_div7"; + clkp_freq = <0x1107a650>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x64 0xbe>; + linux,phandle = <0x9>; + phandle = <0x9>; + }; + + clk400_cfg { + clk_freq = <0x17d78400>; + clk_parent = "fclk_div5"; + clkp_freq = <0x17d78400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x98 0xcf>; + linux,phandle = <0xa>; + phandle = <0xa>; + }; + + clk500_cfg { + clk_freq = <0x1dcd6500>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xb4 0xdc>; + linux,phandle = <0xb>; + phandle = <0xb>; + }; + + clk666_cfg { + clk_freq = <0x27bc8410>; + clk_parent = "fclk_div3"; + clkp_freq = <0x27bc8410>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xd2 0xec>; + linux,phandle = <0xc>; + phandle = <0xc>; + }; + + clk720_cfg { + clk_freq = <0x2aea5400>; + clk_parent = "gp0_pll"; + clkp_freq = <0x2aea5400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xe6 0xff>; + }; + }; + + cpus { + #address-cells = <0x2>; + #size-cells = <0x0>; + + cpu-map { + + cluster0 { + #cooling-cells = <0x2>; + linux,phandle = <0x81>; + phandle = <0x81>; + + core0 { + cpu = <0xd>; + }; + + core1 { + cpu = <0xe>; + }; + + core2 { + cpu = <0xf>; + }; + + core3 { + cpu = <0x10>; + }; + }; + + cluster1 { + #cooling-cells = <0x2>; + linux,phandle = <0x82>; + phandle = <0x82>; + + core0 { + cpu = <0x11>; + }; + + core1 { + cpu = <0x12>; + }; + + core2 { + cpu = <0x13>; + }; + + core3 { + cpu = <0x14>; + }; + }; + }; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xd>; + phandle = <0xd>; + }; + + cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xe>; + phandle = <0xe>; + }; + + cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xf>; + phandle = <0xf>; + }; + + cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x10>; + phandle = <0x10>; + }; + + cpu@100 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x100>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x11>; + phandle = <0x11>; + }; + + cpu@101 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x101>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x12>; + phandle = <0x12>; + }; + + cpu@102 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x102>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x13>; + phandle = <0x13>; + }; + + cpu@103 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x103>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x14>; + phandle = <0x14>; + }; + + idle-states { + entry-method = "arm,psci"; + + cpu-sleep-0 { + compatible = "arm, idle-state"; + arm,psci-suspend-param = <0x10000>; + local-timer-stop; + entry-latency-us = <0x1f40>; + exit-latency-us = <0x1f40>; + min-residency-us = <0x4e20>; + linux,phandle = <0x16>; + phandle = <0x16>; + }; + + cluster-sleep-0 { + compatible = "arm, idle-state"; + arm,psci-suspend-param = <0x1010000>; + local-timer-stop; + entry-latency-us = <0x1f40>; + exit-latency-us = <0x1f40>; + min-residency-us = <0x61a8>; + linux,phandle = <0x17>; + phandle = <0x17>; + }; + }; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x1 0xd 0xff01 0x1 0xe 0xff01 0x1 0xb 0xff01 0x1 0xa 0xff01>; + }; + + timer_bc { + compatible = "arm, meson-bc-timer"; + reg = <0x0 0xc1109990 0x0 0x4 0x0 0xc1109994 0x0 0x4>; + timer_name = "Meson TimerF"; + clockevent-rating = <0x12c>; + clockevent-shift = <0x14>; + clockevent-features = <0x23>; + interrupts = <0x0 0x3c 0x1>; + bit_enable = <0x10>; + bit_mode = <0xc>; + bit_resolution = <0x0>; + }; + + arm_pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0x0 0x89 0x4 0x0 0x8a 0x4 0x0 0x99 0x4 0x0 0x9a 0x4>; + }; + + pm { + compatible = "amlogic, pm"; + device_name = "aml_pm"; + gxbaby-suspend; + reg = <0x0 0xc81000a8 0x0 0x4 0x0 0xc810023c 0x0 0x4>; + }; + + interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <0x3>; + #address-cells = <0x0>; + interrupt-controller; + reg = <0x0 0xc4301000 0x0 0x1000 0x0 0xc4302000 0x0 0x100>; + interrupts = <0x1 0x9 0xf04>; + linux,phandle = <0x1>; + phandle = <0x1>; + }; + + aml_restart { + compatible = "aml, restart"; + sys_reset = <0x84000009>; + sys_poweroff = <0x84000008>; + }; + + psci { + compatible = "arm,psci"; + method = "smc"; + cpu_suspend = <0xc4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xc4000003>; + migrate = <0xc4000005>; + }; + + secmon { + compatible = "amlogic, secmon"; + memory-region = <0x18>; + in_base_func = <0x82000020>; + out_base_func = <0x82000021>; + }; + + securitykey { + compatible = "aml, securitykey"; + storage_query = <0x82000060>; + storage_read = <0x82000061>; + storage_write = <0x82000062>; + storage_tell = <0x82000063>; + storage_verify = <0x82000064>; + storage_status = <0x82000065>; + storage_list = <0x82000067>; + storage_remove = <0x82000068>; + storage_in_func = <0x82000023>; + storage_out_func = <0x82000024>; + storage_block_func = <0x82000025>; + storage_size_func = <0x82000027>; + storage_set_enctype = <0x8200006a>; + storage_get_enctype = <0x8200006b>; + storage_version = <0x8200006c>; + }; + + cpu_iomap { + compatible = "amlogic, iomap"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_cbus_base { + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + + io_apb_base { + reg = <0x0 0xd0000000 0x0 0x200000>; + }; + + io_aobus_base { + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + }; + + cpufreq { + compatible = "arm, scpi-cpufreq"; + }; + + amlogic-watchdog { + compatible = "amlogic, gx-wdt"; + status = "disable"; + default_timeout = <0xa>; + reset_watchdog_method = <0x1>; + reset_watchdog_time = <0x2>; + shutdown_timeout = <0xa>; + firmware_timeout = <0x6>; + suspend_timeout = <0x6>; + reg = <0x0 0xc11098d0 0x0 0x10>; + clocks = <0x6 0x2>; + }; + + amlogic-jtag { + compatible = "amlogic, jtag"; + status = "okay"; + pinctrl-names = "jtag_apao_pins", "jtag_apee_pins"; + pinctrl-0 = <0x19>; + pinctrl-1 = <0x1a>; + }; + + meson_clock { + compatible = "amlogic, gxl-clock"; + reg = <0x0 0xc883c000 0x0 0x1000 0x0 0xc8100000 0x0 0x1000>; + #clock-cells = <0x1>; + #reset-cells = <0x1>; + sys_max = <0x5b8d8000>; + linux,phandle = <0x6>; + phandle = <0x6>; + }; + + cpu_info { + compatible = "amlogic, cpuinfo"; + cpuinfo_cmd = <0x82000044>; + }; + + pinmux { + compatible = "amlogic, pinmux-gxl"; + dev_name = "pinmux"; + #pinmux-cells = <0x2>; + #address-cells = <0x2>; + #size-cells = <0x2>; + reg = <0x0 0xc1109880 0x0 0x10>; + ranges; + + banks@c11080b0 { + reg = <0x0 0xc88344b0 0x0 0x28 0x0 0xc88344e8 0x0 0x14 0x0 0xc8834520 0x0 0x14 0x0 0xc8834430 0x0 0x40>; + reg-names = "mux", "pull", "pull-enable", "gpio"; + gpio-controller; + #gpio-cells = <0x2>; + linux,phandle = <0x38>; + phandle = <0x38>; + }; + + ao-bank@c1108030 { + reg = <0x0 0xc8100014 0x0 0x8 0x0 0xc810002c 0x0 0x4 0x0 0xc8100024 0x0 0x8>; + reg-names = "mux", "pull", "gpio"; + gpio-controller; + #gpio-cells = <0x2>; + linux,phandle = <0x37>; + phandle = <0x37>; + }; + + external_eth_pins { + amlogic,setmask = <0x4 0xfffc00>; + amlogic,clrmask = <0x4 0x3fc 0x3 0xffcff800>; + amlogic,pins = "GPIOZ_0", "GPIOZ_1", "GPIOZ_2", "GPIOZ_3", "GPIOZ_4", "GPIOZ_5", "GPIOZ_6", "GPIOZ_7", "GPIOZ_8", "GPIOZ_9", "GPIOZ_10", "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + linux,phandle = <0x3b>; + phandle = <0x3b>; + }; + + internal_eth_pins { + amlogic,setmask = <0x4 0x3000000>; + amlogic,clrmask = <0x3 0x300000>; + amlogic,pins = "GPIOZ_14", "GPIOZ_15"; + }; + + jtag_apao_pin { + amlogic,clrmask = <0x6 0x7fe0000>; + amlogic,pins = "GPIOH_6", "GPIOH_7", "GPIOH_8", "GPIOH_9"; + linux,phandle = <0x19>; + phandle = <0x19>; + }; + + jtag_apee_pin { + amlogic,clrmask = <0x6 0x3c>; + amlogic,pins = "CARD_0", "CARD_1", "CARD_2", "CARD_3"; + linux,phandle = <0x1a>; + phandle = <0x1a>; + }; + + remote_pin { + amlogic,setmask = <0x10 0x1>; + amlogic,pins = "GPIOAO_7"; + linux,phandle = <0x26>; + phandle = <0x26>; + }; + + ao_uart { + amlogic,setmask = <0x10 0x1800>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + }; + + ao_b_uart { + amlogic,setmask = <0x10 0x1800000>; + amlogic,pins = "GPIOAO_4", "GPIOAO_5"; + linux,phandle = <0x6b>; + phandle = <0x6b>; + }; + + a_uart { + amlogic,setmask = <0x5 0xf0000>; + amlogic,clrmask = <0x5 0x3c0>; + amlogic,pins = "GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15"; + linux,phandle = <0x68>; + phandle = <0x68>; + }; + + b_uart { + amlogic,setmask = <0x2 0x18000>; + amlogic,pins = "GPIODV_24", "GPIODV_25"; + linux,phandle = <0x69>; + phandle = <0x69>; + }; + + c_uart { + amlogic,setmask = <0x5 0x3000>; + amlogic,pins = "GPIOX_8", "GPIOX_9"; + linux,phandle = <0x6a>; + phandle = <0x6a>; + }; + + wifi_32k_pins { + amlogic,setmask = <0x5 0x8000>; + amlogic,pins = "GPIOX_16"; + linux,phandle = <0x41>; + phandle = <0x41>; + }; + + sd_clk_cmd_pins { + amlogic,setmask = <0x6 0xc 0x10 0x1800>; + amlogic,pins = "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x47>; + phandle = <0x47>; + }; + + sd_all_pins { + amlogic,setmask = <0x6 0x3f 0x10 0x1800>; + amlogic,clrmask = <0x6 0xfc0>; + amlogic,pins = "CARD_0", "CARD_1", "CARD_2", "CARD_3", "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x48>; + phandle = <0x48>; + }; + + sd_1bit_pins { + amlogic,setmask = <0x6 0x1c 0x10 0x1800>; + amlogic,clrmask = <0x6 0xcc3>; + amlogic,pins = "CARD_1", "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x49>; + phandle = <0x49>; + }; + + sd_clk_cmd_uart_pins { + amlogic,setmask = <0x6 0x30c>; + amlogic,clrmask = <0x6 0xcc3 0x10 0x1800>; + amlogic,pins = "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4a>; + phandle = <0x4a>; + }; + + sd_1bit_uart_pins { + amlogic,setmask = <0x6 0x31c>; + amlogic,clrmask = <0x6 0xcc3 0x10 0x1800>; + amlogic,pins = "CARD_1", "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4b>; + phandle = <0x4b>; + }; + + sd_to_ao_uart_pins { + amlogic,setmask = <0x10 0x1800>; + amlogic,clrmask = <0x6 0x300>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4c>; + phandle = <0x4c>; + }; + + ao_to_sd_uart_pins { + amlogic,setmask = <0x6 0x300>; + amlogic,clrmask = <0x10 0x1800 0x6 0xcc3>; + amlogic,pins = "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4d>; + phandle = <0x4d>; + }; + + ao_to_sd_jtag_pins { + amlogic,setmask = <0x6 0x300>; + amlogic,clrmask = <0x6 0xcff 0x10 0x1800>; + amlogic,pins = "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4e>; + phandle = <0x4e>; + }; + + sd_to_ao_jtag_pins { + amlogic,setmask = <0x10 0x1800>; + amlogic,clrmask = <0x6 0xfc0>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4f>; + phandle = <0x4f>; + }; + + emmc_clk_cmd_pins { + amlogic,setmask = <0x7 0x60000000>; + amlogic,clrmask = <0x7 0xe0>; + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x43>; + phandle = <0x43>; + }; + + emmc_conf_pull_up { + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_10"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x44>; + phandle = <0x44>; + }; + + emmc_conf_pull_done { + amlogic,pins = "BOOT_15"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x45>; + phandle = <0x45>; + }; + + emmc_all_pins { + amlogic,setmask = <0x7 0xf0000000>; + amlogic,clrmask = <0x7 0xe0>; + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_10", "BOOT_15"; + amlogic,enable-output = <0x1>; + linux,phandle = <0x46>; + phandle = <0x46>; + }; + + sdio_clk_cmd_pins { + amlogic,setmask = <0x5 0xc000000>; + amlogic,pins = "GPIOX_4", "GPIOX_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x50>; + phandle = <0x50>; + }; + + sdio_all_pins { + amlogic,setmask = <0x5 0xfc000000>; + amlogic,pins = "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", "GPIOX_4", "GPIOX_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x51>; + phandle = <0x51>; + }; + + conf_nand_pulldown { + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_15"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x52>; + phandle = <0x52>; + }; + + conf_nand_pullup { + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x53>; + phandle = <0x53>; + }; + + all_nand_pins { + amlogic,setmask = <0x7 0x800000ff>; + amlogic,clrmask = <0x7 0x70ffbc00>; + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_9", "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14", "BOOT_15"; + amlogic,enable-output = <0x1>; + linux,phandle = <0x54>; + phandle = <0x54>; + }; + + nand_cs { + amlogic,setmask = <0x7 0xc0>; + amlogic,clrmask = <0x7 0x40040000>; + amlogic,pins = "BOOT_8", "BOOT_9"; + linux,phandle = <0x55>; + phandle = <0x55>; + }; + + hdmitx_hpd { + amlogic,setmask = <0x6 0x80000000>; + amlogic,pins = "GPIOH_0"; + linux,phandle = <0x65>; + phandle = <0x65>; + }; + + hdmitx_ddc { + amlogic,setmask = <0x6 0x30000000>; + amlogic,pins = "GPIOH_1", "GPIOH_2"; + linux,phandle = <0x66>; + phandle = <0x66>; + }; + + hdmitx_aocec { + amlogic,setmask = <0x10 0x8000>; + amlogic,clrmask = <0x10 0x24000 0x11 0x1>; + amlogic,pins = "GPIOAO_8"; + linux,phandle = <0x67>; + phandle = <0x67>; + }; + + hdmitx_eecec { + amlogic,setmask = <0x10 0x4000>; + amlogic,clrmask = <0x10 0x28000 0x11 0x1>; + amlogic,pins = "GPIOAO_8"; + }; + + ao_i2c { + amlogic,setmask = <0x10 0x60>; + amlogic,clrmask = <0x10 0x1800006>; + amlogic,pins = "GPIOAO_4", "GPIOAO_5"; + linux,phandle = <0x1b>; + phandle = <0x1b>; + }; + + a_i2c { + amlogic,setmask = <0x1 0xc000>; + amlogic,clrmask = <0x3 0x18 0x2 0x18000 0x2 0xc0 0x1 0x600000>; + amlogic,pins = "GPIODV_24", "GPIODV_25"; + linux,phandle = <0x1c>; + phandle = <0x1c>; + }; + + b_i2c { + amlogic,setmask = <0x1 0x3000>; + amlogic,clrmask = <0x2 0x6000 0x1 0x1c0000>; + amlogic,pins = "GPIODV_26", "GPIODV_27"; + linux,phandle = <0x1d>; + phandle = <0x1d>; + }; + + c_i2c { + amlogic,setmask = <0x1 0xc00>; + amlogic,clrmask = <0x2 0x1800 0x1 0x200 0x2 0x20>; + amlogic,pins = "GPIODV_28", "GPIODV_29"; + linux,phandle = <0x1e>; + phandle = <0x1e>; + }; + + c_i2c_pin1 { + amlogic,setmask = <0x1 0x30000>; + amlogic,clrmask = <0x1 0x2000000 0x3 0x20>; + amlogic,pins = "GPIODV_18", "GPIODV_19"; + }; + + d_i2c { + amlogic,setmask = <0x5 0x30>; + amlogic,clrmask = <0x5 0x300c03 0x6 0x3>; + amlogic,pins = "GPIOX_10", "GPIOX_11"; + linux,phandle = <0x1f>; + phandle = <0x1f>; + }; + + spicc_pins_z11z12z13 { + amlogic,setmask = <0x4 0x1c>; + amlogic,clrmask = <0x3 0x800 0x4 0x1c00>; + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + }; + + spicc_pulldown_z11z12z13 { + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + }; + + spicc_pullup_z11z12z13 { + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + }; + + spicc_pins_x8x9x11 { + amlogic,setmask = <0x5 0xd>; + amlogic,clrmask = <0x5 0xd03430 0x6 0xd>; + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + }; + + spicc_pulldown_x8x9x11 { + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + }; + + spicc_pullup_x8x9x11 { + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + }; + + audio_pin { + amlogic,setmask = <0x6 0x7800000>; + amlogic,clrmask = <0x6 0x7e0000>; + amlogic,pins = "GPIOH_6", "GPIOH_7", "GPIOH_8", "GPIOH_9"; + linux,phandle = <0x70>; + phandle = <0x70>; + }; + + audio_pin1 { + amlogic,setmask = <0x6 0x10000000>; + amlogic,clrmask = <0x6 0x8000000>; + amlogic,pins = "GPIOH_4"; + linux,phandle = <0x6f>; + phandle = <0x6f>; + }; + + audio_btpcm_pins { + amlogic,setmask = <0x5 0xf00000>; + amlogic,clrmask = <0x5 0x3c33>; + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11"; + linux,phandle = <0x6e>; + phandle = <0x6e>; + }; + }; + + cpu_version { + reg = <0x0 0xc8100220 0x0 0x4>; + }; + + meson_clk_msr { + compatible = "amlogic, gxl_measure"; + reg = <0x0 0xc110875c 0x0 0x4 0x0 0xc1108764 0x0 0x4>; + }; + + i2c@c8100500 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-AO"; + status = "disabled"; + reg = <0x0 0xc8100500 0x0 0x1d>; + device_id = <0x0>; + pinctrl-names = "default"; + pinctrl-0 = <0x1b>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c1108500 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-A"; + status = "disabled"; + reg = <0x0 0xc1108500 0x0 0x20>; + device_id = <0x1>; + pinctrl-names = "default"; + pinctrl-0 = <0x1c>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c11087c0 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-B"; + status = "okay"; + reg = <0x0 0xc11087c0 0x0 0x20>; + device_id = <0x2>; + pinctrl-names = "default"; + pinctrl-0 = <0x1d>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x186a0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + + khadas-hym8563 { + compatible = "khadas-hym8563"; + reg = <0x51>; + }; + }; + + i2c@c11087e0 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-C"; + status = "disabled"; + reg = <0x0 0xc11087e0 0x0 0x20>; + device_id = <0x3>; + pinctrl-names = "default"; + pinctrl-0 = <0x1e>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c1108d20 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-D"; + status = "disabled"; + reg = <0x0 0xc1108d20 0x0 0x20>; + device_id = <0x4>; + pinctrl-names = "default"; + pinctrl-0 = <0x1f>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + efuse { + compatible = "amlogic, efuse"; + read_cmd = <0x82000030>; + write_cmd = <0x82000031>; + get_max_cmd = <0x82000033>; + key = <0x20>; + resets = <0x6 0x3e>; + reset-names = "efuse_clk"; + status = "ok"; + }; + + efusekey { + keynum = <0x4>; + key0 = <0x21>; + key1 = <0x22>; + key2 = <0x23>; + key3 = <0x24>; + linux,phandle = <0x20>; + phandle = <0x20>; + + key_0 { + keyname = "mac"; + offset = <0x0>; + size = <0xc>; + linux,phandle = <0x21>; + phandle = <0x21>; + }; + + key_1 { + keyname = "mac_bt"; + offset = <0xc>; + size = <0xc>; + linux,phandle = <0x22>; + phandle = <0x22>; + }; + + key_2 { + keyname = "mac_wifi"; + offset = <0x18>; + size = <0xc>; + linux,phandle = <0x23>; + phandle = <0x23>; + }; + + key_3 { + keyname = "usid"; + offset = <0x24>; + size = <0xc>; + linux,phandle = <0x24>; + phandle = <0x24>; + }; + }; + + mhu@c883c400 { + compatible = "amlogic, meson_mhu"; + reg = <0x0 0xc883c400 0x0 0x4c 0x0 0xc8013000 0x0 0x800>; + interrupts = <0x0 0xd1 0x8 0x0 0xd2 0x8>; + #mbox-cells = <0x1>; + mbox-names = "cpu_to_scp_low", "cpu_to_scp_high"; + mboxes = <0x25 0x0 0x25 0x1>; + linux,phandle = <0x25>; + phandle = <0x25>; + }; + + scpi_clocks { + compatible = "arm,scpi-clks"; + + scpi_clocks@0 { + compatible = "arm,scpi-clk-indexed"; + #clock-cells = <0x1>; + clock-indices = <0x0 0x1>; + clock-output-names = "vbig", "vlittle"; + linux,phandle = <0x15>; + phandle = <0x15>; + }; + }; + + rc@c8100580 { + compatible = "amlogic, aml_remote"; + dev_name = "meson-remote"; + reg = <0x0 0xc8100580 0x0 0x44 0x0 0xc8100480 0x0 0x20>; + status = "okay"; + protocol = <0x1>; + interrupts = <0x0 0xc4 0x1>; + pinctrl-names = "default"; + pinctrl-0 = <0x26>; + map = <0x27>; + max_frame_time = <0xc8>; + }; + + custom_maps { + mapnum = <0x4>; + map0 = <0x28>; + map1 = <0x29>; + map2 = <0x2a>; + map3 = <0x2b>; + linux,phandle = <0x27>; + phandle = <0x27>; + + map_0 { + mapname = "amlogic-remote-1"; + customcode = <0xfb04>; + release_delay = <0x50>; + size = <0x2c>; + keymap = <0x47000b 0x130002 0x100003 0x110004 0xf0005 0xc0006 0xd0007 0xb0008 0x80009 0x9000a 0x5c0061 0x510041 0x49000e 0x60082 0x140083 0x440067 0x1d006c 0x1c0069 0x48006a 0x53007d 0x450068 0x19006d 0x160066 0x520077 0x5007a 0x59007b 0x1b0078 0x40079 0x1a0074 0xa000f 0xe0071 0x15003f 0x1f0066 0x1e0084 0x70085 0x120086 0x540087 0x20088 0x4f001e 0x420030 0x5d002e 0x4c0020 0x580089 0x55008c>; + linux,phandle = <0x28>; + phandle = <0x28>; + }; + + map_1 { + mapname = "amlogic-remote-2"; + customcode = <0xfe01>; + release_delay = <0x50>; + size = <0x35>; + keymap = <0x10002 0x20003 0x30004 0x40005 0x50006 0x60007 0x70008 0x80009 0x9000a 0xa000b 0x1f01d2 0x15008b 0x16000f 0xc0192 0xd0193 0xe0073 0xf0072 0x110066 0x1c006a 0x1b0069 0x190067 0x1a006c 0x1d001c 0x170071 0x4900db 0x43009e 0x1201d5 0x1401d6 0x1801d7 0x590166 0x5a00a6 0x100074 0x4200a5 0x4400a3 0x1e00a8 0x4b00d0 0x5800a4 0x460082 0x400083 0x380046 0x5701d0 0x5b01d1 0x54018e 0x4c018f 0x4e0190 0x550191 0x5300ed 0x5200ee 0x3900d4 0x4100d5 0xb00d6 0xd8 0x1300d9>; + linux,phandle = <0x29>; + phandle = <0x29>; + }; + + map_2 { + mapname = "amlogic-remote-3"; + customcode = <0xbd02>; + release_delay = <0x50>; + size = <0x11>; + keymap = <0xca0067 0xd2006c 0x990069 0xc1006a 0xce0061 0x450074 0xc50085 0x800071 0xd0000f 0xd6007d 0x950066 0xdd0068 0x8c006d 0x890083 0x9c0082 0x9a0078 0xcd0079>; + linux,phandle = <0x2a>; + phandle = <0x2a>; + }; + + map_3 { + mapname = "khadas-ir"; + customcode = <0xff00>; + release_delay = <0x50>; + fn_key_scancode = <0x5c>; + fn_key_scancode_other = <0x5b>; + cursor_left_scancode = <0xe>; + cursor_right_scancode = <0x1a>; + cursor_up_scancode = <0x3>; + cursor_down_scancode = <0x2>; + cursor_ok_scancode = <0x7>; + size = <0xd>; + keymap = <0x140074 0x13008b 0x30067 0x2006c 0xe0069 0x1a006a 0x700e8 0x580072 0x5c003f 0x5b003f 0xb0073 0x1009e 0x480066>; + linux,phandle = <0x2b>; + phandle = <0x2b>; + }; + }; + + rng { + compatible = "amlogic,meson-rng"; + reg = <0x0 0xc8834000 0x0 0x4>; + }; + + audio_data { + compatible = "amlogic, audio_data"; + query_licence_cmd = <0x82000050>; + status = "okay"; + }; + + saradc { + compatible = "amlogic, saradc"; + status = "okay"; + interrupts = <0x0 0x9 0x1>; + interrupt-names = "saradc_int"; + clocks = <0x6 0x2>; + clock-names = "saradc_clk"; + resets = <0x6 0x56>; + reg = <0x0 0xc1108680 0x0 0x30 0x0 0xc883c3d8 0x0 0x8>; + }; + + defendkey { + compatible = "amlogic, defendkey"; + reg = <0x0 0xc8834500 0x0 0x4>; + mem_size = <0x0 0x100000>; + status = "okay"; + }; + + spicc { + compatible = "amlogic, spicc"; + status = "disabled"; + reg = <0x0 0xc1108d80 0x0 0x28>; + resets = <0x6 0x8>; + reset-names = "spicc_clk"; + clocks = <0x6 0xa>; + clock-names = "clk81"; + interrupts = <0x0 0x51 0x1>; + device_id = <0x0>; + }; + + aml_aes { + compatible = "amlogic,aes_dma"; + dev_name = "aml_aes_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aml_tdes { + compatible = "amlogic,des_dma,tdes_dma"; + dev_name = "aml_tdes_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aml_sha { + compatible = "amlogic,sha_dma"; + dev_name = "aml_sha_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + meson-pwm { + compatible = "amlogic, meson-pwm"; + status = "okay"; + #pwm-cells = <0x2>; + pwm-outputs = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf>; + reg = <0x0 0xc1108550 0x0 0x1c 0x0 0xc1108640 0x0 0x1c 0x0 0xc11086c0 0x0 0x1c 0x0 0xc8100550 0x0 0x1c>; + clocks = <0x6 0x2 0x6 0x5 0x6 0x9 0x6 0x8>; + clock-names = "xtal", "vid_pll_clk", "fclk_div4", "fclk_div3"; + clock-select = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0>; + }; + + partitions { + parts = <0xb>; + part-0 = <0x2c>; + part-1 = <0x2d>; + part-2 = <0x2e>; + part-3 = <0x2f>; + part-4 = <0x30>; + part-5 = <0x31>; + part-6 = <0x32>; + part-7 = <0x33>; + part-8 = <0x34>; + part-9 = <0x35>; + part-10 = <0x36>; + + recovery { + pname = "recovery"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x2c>; + phandle = <0x2c>; + }; + + rsv { + pname = "rsv"; + size = <0x0 0x800000>; + mask = <0x1>; + linux,phandle = <0x2d>; + phandle = <0x2d>; + }; + + tee { + pname = "tee"; + size = <0x0 0x800000>; + mask = <0x1>; + linux,phandle = <0x2e>; + phandle = <0x2e>; + }; + + crypt { + pname = "crypt"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x2f>; + phandle = <0x2f>; + }; + + misc { + pname = "misc"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x30>; + phandle = <0x30>; + }; + + boot { + pname = "boot"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x31>; + phandle = <0x31>; + }; + + system { + pname = "system"; + size = <0x0 0x80000000>; + mask = <0x1>; + linux,phandle = <0x32>; + phandle = <0x32>; + }; + + cache { + pname = "cache"; + size = <0x0 0x20000000>; + mask = <0x2>; + linux,phandle = <0x33>; + phandle = <0x33>; + }; + + libreelec { + pname = "libreelec"; + size = <0x0 0x20000000>; + mask = <0x4>; + linux,phandle = <0x34>; + phandle = <0x34>; + }; + + linux { + pname = "linux"; + size = <0x0 0xfffffe00>; + mask = <0x4>; + linux,phandle = <0x35>; + phandle = <0x35>; + }; + + data { + pname = "data"; + size = <0xffffffff 0xffffffff>; + mask = <0x4>; + linux,phandle = <0x36>; + phandle = <0x36>; + }; + + }; + + aliases { + serial0 = "/serial@c81004c0"; + serial1 = "/serial@c11084c0"; + serial2 = "/serial@c11084dc"; + serial3 = "/serial@c1108700"; + serial4 = "/serial@c81004e0"; + }; + + memory@00000000 { + device_type = "memory"; + linux,usable-memory-2g = <0x0 0x100000 0x0 0x7ff00000>; + linux,usable-memory-3g = <0x0 0x100000 0x0 0xbff00000>; + }; + + reserved-memory { + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + linux,secmon { + compatible = "amlogic, aml_secmon_memory"; + reg = <0x0 0x10000000 0x0 0x200000>; + no-map; + linux,phandle = <0x18>; + phandle = <0x18>; + }; + + linux,secos { + status = "disable"; + compatible = "amlogic, aml_secos_memory"; + reg = <0x0 0x5300000 0x0 0x2000000>; + no-map; + }; + + aml_pstore { + compatible = "amlogic, pstore"; + reg = <0x0 0x7300000 0x0 0x100000>; + no-map; + }; + + linux,di { + compatible = "amlogic, di-mem"; + size = <0x0 0x1e00000>; + linux,phandle = <0x3f>; + phandle = <0x3f>; + }; + + linux,ion-dev { + compatible = "amlogic, idev-mem"; + size = <0x0 0x4000000>; + linux,phandle = <0x3c>; + phandle = <0x3c>; + }; + + linux,vdin1_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x1000000>; + alignment = <0x0 0x400000>; + linux,phandle = <0x40>; + phandle = <0x40>; + }; + + linux,ppmgr { + compatible = "shared-dma-pool"; + size = <0x0 0x0>; + linux,phandle = <0x3e>; + phandle = <0x3e>; + }; + + linux,codec_mm_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0xc000000>; + alignment = <0x0 0x400000>; + linux,contiguous-region; + linux,phandle = <0x39>; + phandle = <0x39>; + }; + + linux,picdec { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x0>; + alignment = <0x0 0x0>; + linux,contiguous-region; + linux,phandle = <0x3d>; + phandle = <0x3d>; + }; + + linux,codec_mm_reserved { + compatible = "amlogic, codec-mm-reserved"; + size = <0x0 0x4100000>; + alignment = <0x0 0x100000>; + linux,phandle = <0x3a>; + phandle = <0x3a>; + }; + }; + + sysled { + compatible = "amlogic, sysled"; + dev_name = "sysled"; + status = "okay"; + led_gpio = <0x37 0x9 0x0>; + led_active_low = <0x1>; + }; + + fan { + compatible = "fanctl"; + fan_ctl0 = <0x38 0x3f 0x0>; + fan_ctl1 = <0x38 0x40 0x0>; + trig_temp_level0 = <0x32>; + trig_temp_level1 = <0x3c>; + trig_temp_level2 = <0x46>; + }; + + meson-vout { + compatible = "amlogic, meson-vout"; + dev_name = "meson-vout"; + status = "okay"; + }; + + meson-fb { + compatible = "amlogic, meson-fb"; + dev_name = "meson-fb"; + status = "okay"; + interrupts = <0x0 0x3 0x1 0x0 0x59 0x1>; + interrupt-names = "viu-vsync", "rdma"; + mem_size = <0x1851000 0x100000>; + display_mode_default = "1080p60hz"; + scale_mode = <0x1>; + display_size_default = <0x780 0x438 0x780 0xca8 0x20>; + logo_addr_2g = "0x7d851000"; + logo_addr_3g = "0xbd851000"; + }; + + ge2d { + compatible = "amlogic, ge2d"; + dev_name = "ge2d"; + status = "okay"; + interrupts = <0x0 0x96 0x1>; + interrupt-names = "ge2d"; + clocks = <0x6 0x17 0x6 0x19>; + clock-names = "clk_vapb_0", "clk_ge2d"; + resets = <0x6 0x34>; + reset-names = "ge2d"; + }; + + codec_io { + compatible = "amlogic, codec_io"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_cbus_base { + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + + io_dos_base { + reg = <0x0 0xc8820000 0x0 0x10000>; + }; + + io_hiubus_base { + reg = <0x0 0xc883c000 0x0 0x2000>; + }; + + io_aobus_base { + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + + io_vcbus_base { + reg = <0x0 0xd0100000 0x0 0x40000>; + }; + + io_dmc_base { + reg = <0x0 0xc8838000 0x0 0x400>; + }; + }; + + codec_mm { + compatible = "amlogic, codec, mm"; + memory-region = <0x39 0x3a>; + dev_name = "codec_mm"; + status = "okay"; + }; + + ethernet@0xc9410000 { + compatible = "amlogic, gxbb-rgmii-dwmac"; + reg = <0x0 0xc9410000 0x0 0x10000 0x0 0xc8834540 0x0 0x8 0x0 0xc8834558 0x0 0xc>; + interrupts = <0x0 0x8 0x1>; + phy-mode = "rgmii"; + pinctrl-names = "external_eth_pins"; + pinctrl-0 = <0x3b>; + rst_pin-gpios = <0x38 0xe 0x0>; + GPIOZ4_pin-gpios = <0x38 0x4 0x0>; + GPIOZ5_pin-gpios = <0x38 0x5 0x0>; + mc_val = <0x1621>; + cali_val = <0x20000>; + resets = <0x6 0x23>; + reset-names = "ethpower"; + interrupt-names = "macirq"; + clocks = <0x6 0xa>; + clock-names = "ethclk81"; + internal_phy = <0x0>; + }; + + mesonstream { + compatible = "amlogic, codec, streambuf"; + dev_name = "mesonstream"; + status = "okay"; + resets = <0x6 0x39 0x6 0x59 0x6 0x24 0x6 0x1>; + reset-names = "parser_top", "vpu_intr", "demux", "vdec"; + }; + + amvideocap { + compatible = "amlogic, amvideocap"; + dev_name = "amvideocap.0"; + status = "okay"; + max_size = <0x8>; + }; + + ion_dev { + compatible = "amlogic, ion_dev"; + memory-region = <0x3c>; + }; + + vdec { + compatible = "amlogic, vdec"; + dev_name = "vdec.0"; + status = "okay"; + interrupts = <0x0 0x3 0x1 0x0 0x17 0x1 0x0 0x20 0x1 0x0 0x2b 0x1 0x0 0x2c 0x1 0x0 0x2d 0x1>; + interrupt-names = "vsync", "demux", "parser", "mailbox_0", "mailbox_1", "mailbox_2"; + }; + + picdec { + compatible = "amlogic, picdec"; + memory-region = <0x3d>; + dev_name = "picdec"; + status = "okay"; + }; + + ppmgr { + compatible = "amlogic, ppmgr"; + memory-region = <0x3e>; + dev_name = "ppmgr"; + status = "okay"; + }; + + deinterlace { + compatible = "amlogic, deinterlace"; + status = "okay"; + memory-region = <0x3f>; + interrupts = <0x0 0x2e 0x1 0x0 0x6 0x1>; + interrupt-names = "de_irq", "timerc"; + buffer-size = <0x2fd000>; + hw-version = <0x2>; + }; + + vdin0 { + compatible = "amlogic, vdin"; + dev_name = "vdin0"; + status = "ok"; + reserve-iomap = "true"; + flag_cma = <0x1>; + cma_size = <0x10>; + interrupts = <0x0 0x53 0x1>; + rdma-irq = <0x2>; + clocks = <0x6 0x11 0x6 0x29>; + clock-names = "fclk_div5", "cts_vdin_meas_clk"; + vdin_id = <0x0>; + tv_bit_mode = <0x1>; + }; + + vdin1 { + compatible = "amlogic, vdin"; + memory-region = <0x40>; + dev_name = "vdin1"; + status = "ok"; + reserve-iomap = "true"; + flag_cma = <0x0>; + interrupts = <0x0 0x55 0x1>; + rdma-irq = <0x4>; + clocks = <0x6 0x11 0x6 0x29>; + clock-names = "fclk_div5", "cts_vdin_meas_clk"; + vdin_id = <0x1>; + tv_bit_mode = <0x1>; + }; + + amvdec_656in0 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in0"; + status = "ok"; + reg = <0x0 0xd0048000 0x0 0x7c>; + clocks = <0x6 0x7 0x6 0x26>; + clock-names = "fclk_div2", "cts_bt656_clk0"; + bt656_id = <0x0>; + }; + + amvdec_656in1 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in1"; + status = "ok"; + reg = <0x0 0xd0050000 0x0 0x7c>; + clocks = <0x6 0x7 0x6 0x27>; + clock-names = "fclk_div2", "cts_bt656_clk1"; + bt656_id = <0x1>; + }; + + amlvecm { + compatible = "amlogic, vecm"; + dev_name = "aml_vecm"; + status = "okay"; + gamma_en = <0x0>; + wb_en = <0x0>; + cm_en = <0x0>; + }; + + amvenc_avc { + compatible = "amlogic, amvenc_avc"; + dev_name = "amvenc_avc"; + status = "okay"; + interrupts = <0x0 0x2d 0x1>; + interrupt-names = "mailbox_2"; + }; + + hevc_enc { + compatible = "cnm, HevcEnc"; + dev_name = "HevcEnc"; + status = "okay"; + interrupts = <0x0 0xbb 0x1>; + interrupt-names = "wave420l_irq"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_reg_base { + reg = <0x0 0xc8810000 0x0 0x4000>; + }; + }; + + vpu { + compatible = "amlogic, vpu"; + dev_name = "vpu"; + status = "ok"; + clk_level = <0x7>; + }; + + bt-dev { + compatible = "amlogic, bt-dev"; + dev_name = "bt-dev"; + status = "okay"; + gpio_reset = <0x38 0x60 0x0>; + }; + + rtc { + compatible = "amlogic, aml_vrtc"; + alarm_reg_addr = <0xc81000a8>; + timer_e_addr = <0xc1109988>; + init_date = "2015/01/01"; + status = "okay"; + }; + + wifi { + compatible = "amlogic, aml_wifi"; + dev_name = "aml_wifi"; + status = "okay"; + interrupt_pin = <0x38 0x56 0x0>; + interrupts = <0x0 0x44 0x4>; + irq_trigger_type = "GPIO_IRQ_LOW"; + power_on_pin = <0x38 0x55 0x0>; + dhd_static_buf; + pinctrl-names = "wifi_32k_pins"; + pinctrl-0 = <0x41>; + pwm_config = <0x42>; + }; + + wifi_pwm_conf { + pwm_channel1 = <0x4>; + pwm_channel2 = <0xc>; + pwm_channel1_conf = <0x774d 0x3ba6 0x6>; + pwm_channel2_conf = <0x7736 0x3b9b 0x9>; + linux,phandle = <0x42>; + phandle = <0x42>; + }; + + emmc { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0074000 0x0 0x2000>; + interrupts = <0x0 0xda 0x1>; + pinctrl-names = "emmc_clk_cmd_pins", "emmc_all_pins"; + pinctrl-0 = <0x43>; + pinctrl-1 = <0x44 0x45 0x46>; + + emmc { + status = "disabled"; + pinname = "emmc"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_8_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_1_8V_DDR", "MMC_CAP_HW_RESET", "MMC_CAP_ERASE", "MMC_CAP_CMD23"; + caps2 = "MMC_CAP2_HS200", "MMC_CAP2_HS400"; + f_min = <0x493e0>; + f_max = <0x5f5e100>; + max_req_size = <0x20000>; + gpio_dat3 = <0x38 0x1d 0x0>; + hw_reset = <0x38 0x23 0x0>; + card_type = <0x1>; + }; + }; + + sd { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0072000 0x0 0x2000>; + interrupts = <0x0 0xd9 0x1 0x0 0x43 0x1 0x0 0x45 0x1>; + pinctrl-names = "sd_clk_cmd_pins", "sd_all_pins", "sd_1bit_pins", "sd_clk_cmd_uart_pins", "sd_1bit_uart_pins", "sd_to_ao_uart_pins", "ao_to_sd_uart_pins", "ao_to_sd_jtag_pins", "sd_to_ao_jtag_pins"; + pinctrl-0 = <0x47>; + pinctrl-1 = <0x48>; + pinctrl-2 = <0x49>; + pinctrl-3 = <0x4a>; + pinctrl-4 = <0x4b>; + pinctrl-5 = <0x4c>; + pinctrl-6 = <0x4d>; + pinctrl-7 = <0x4e>; + pinctrl-8 = <0x4f>; + + sd { + status = "okay"; + pinname = "sd"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_4_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED"; + f_min = <0x61a80>; + f_max = <0x5f5e100>; + max_req_size = <0x20000>; + gpio_dat3 = <0x38 0x2e 0x0>; + jtag_pin = <0x38 0x2a 0x0>; + gpio_cd = <0x38 0x30 0x0>; + card_in_delay = <0x190>; + irq_in = <0x3>; + irq_out = <0x5>; + card_type = <0x5>; + }; + }; + + sdio { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0070000 0x0 0x2000>; + interrupts = <0x0 0xd8 0x1>; + pinctrl-names = "sdio_clk_cmd_pins", "sdio_all_pins"; + pinctrl-0 = <0x50>; + pinctrl-1 = <0x51>; + + sdio { + status = "okay"; + pinname = "sdio"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_4_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_UHS_SDR12", "MMC_CAP_UHS_SDR25", "MMC_CAP_UHS_SDR50", "MMC_CAP_UHS_SDR104", "MMC_PM_KEEP_POWER"; + f_min = <0x61a80>; + f_max = <0xbebc200>; + max_req_size = <0x20000>; + card_type = <0x3>; + }; + }; + + nand { + compatible = "amlogic, aml_nand"; + dev_name = "nand"; + status = "disabled"; + reg = <0x0 0xd0074800 0x0 0x200>; + interrupts = <0x0 0x22 0x1>; + pinctrl-names = "nand_rb_mod", "nand_norb_mod", "nand_cs_pins_only"; + pinctrl-0 = <0x52 0x53 0x54>; + pinctrl-1 = <0x52 0x53 0x54>; + pinctrl-2 = <0x55>; + device_id = <0x0>; + plat-names = "nandnormal"; + plat-num = <0x1>; + plat-part-0 = <0x56>; + + normal { + enable_pad = "ce0", "ce1", "ce2", "ce3"; + busy_pad = "rb0"; + linux,phandle = <0x56>; + phandle = <0x56>; + }; + }; + + aml_nftl { + compatible = "amlogic, nftl"; + }; + + unifykey { + compatible = "amlogic, unifykey"; + status = "ok"; + unifykey-num = <0xe>; + unifykey-index-0 = <0x57>; + unifykey-index-1 = <0x58>; + unifykey-index-2 = <0x59>; + unifykey-index-3 = <0x5a>; + unifykey-index-4 = <0x5b>; + unifykey-index-5 = <0x5c>; + unifykey-index-6 = <0x5d>; + unifykey-index-7 = <0x5e>; + unifykey-index-8 = <0x5f>; + unifykey-index-9 = <0x60>; + unifykey-index-10 = <0x61>; + unifykey-index-11 = <0x62>; + unifykey-index-12 = <0x63>; + unifykey-index-13 = <0x64>; + + key_0 { + key-name = "usid"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x57>; + phandle = <0x57>; + }; + + key_1 { + key-name = "mac"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x58>; + phandle = <0x58>; + }; + + key_2 { + key-name = "hdcp"; + key-device = "secure"; + key-type = "sha1"; + key-permit = "read", "write", "del"; + linux,phandle = <0x59>; + phandle = <0x59>; + }; + + key_3 { + key-name = "secure_boot_set"; + key-device = "efuse"; + key-permit = "write"; + linux,phandle = <0x5a>; + phandle = <0x5a>; + }; + + key_4 { + key-name = "mac_bt"; + key-device = "normal"; + key-permit = "read", "write", "del"; + key-type = "mac"; + linux,phandle = <0x5b>; + phandle = <0x5b>; + }; + + key_5 { + key-name = "mac_wifi"; + key-device = "normal"; + key-permit = "read", "write", "del"; + key-type = "mac"; + linux,phandle = <0x5c>; + phandle = <0x5c>; + }; + + key_6 { + key-name = "hdcp2_tx"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5d>; + phandle = <0x5d>; + }; + + key_7 { + key-name = "hdcp2_rx"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5e>; + phandle = <0x5e>; + }; + + key_8 { + key-name = "widevinekeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5f>; + phandle = <0x5f>; + }; + + key_9 { + key-name = "deviceid"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x60>; + phandle = <0x60>; + }; + + key_10 { + key-name = "hdcp22_fw_private"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x61>; + phandle = <0x61>; + }; + + key_11 { + key-name = "PlayReadykeybox25"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x62>; + phandle = <0x62>; + }; + + key_12 { + key-name = "prpubkeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x63>; + phandle = <0x63>; + }; + + key_13 { + key-name = "prprivkeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x64>; + phandle = <0x64>; + }; + }; + + amhdmitx { + compatible = "amlogic, amhdmitx"; + dev_name = "amhdmitx"; + status = "okay"; + pinctrl-names = "hdmitx_hpd", "hdmitx_ddc"; + pinctrl-0 = <0x65>; + pinctrl-1 = <0x66>; + interrupts = <0x0 0x39 0x1>; + interrupt-names = "hdmitx_hpd"; + clocks = <0x6 0xb 0x6 0xc 0x6 0xd 0x6 0xe 0x6 0xf 0x6 0x16>; + clock-names = "hdmitx_clk_sys", "hdmitx_clk_encp", "hdmitx_clk_enci", "hdmitx_clk_pixel", "hdmitx_clk_phy", "hdmitx_clk_vid"; + gpio_i2c_en = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + }; + + aocec { + compatible = "amlogic, amlogic-aocec"; + device_name = "aocec"; + status = "okay"; + vendor_name = "Amlogic"; + vendor_id = <0x0>; + product_desc = "GXBB Mbox"; + cec_osd_string = "MBox"; + port_num = <0x1>; + arc_port_mask = <0x0>; + interrupts = <0x0 0xc7 0x1>; + interrupt-names = "hdmi_aocec"; + pinctrl-names = "hdmitx_aocec"; + pinctrl-0 = <0x67>; + reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + }; + + tvout { + compatible = "amlogic, tvout"; + dev_name = "tvout"; + status = "okay"; + }; + + i2c_gpio { + compatible = "i2c-gpio"; + status = "okay"; + dev_name = "i2c-gpio"; + i2c-gpio,delay-us = <0xa>; + gpios = <0x38 0x11 0x0 0x38 0x12 0x0>; + #address-cells = <0x2>; + #size-cells = <0x2>; + i2c-gpio,timeout-ms = <0xa>; + + i2c_gpio_edid { + compatible = "i2c-gpio-edid"; + reg = <0x50 0x0 0x0 0x0>; + }; + }; + + serial@c81004c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004c0 0x0 0x18>; + interrupts = <0x0 0xc1 0x1>; + status = "okay"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + xtal_tick_en = <0x1>; + fifosize = <0x40>; + pinctrl-names = "default"; + support-sysrq = <0x0>; + }; + + serial@c11084c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084c0 0x0 0x18>; + interrupts = <0x0 0x1a 0x1>; + status = "okay"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x80>; + pinctrl-names = "default"; + pinctrl-0 = <0x68>; + resets = <0x6 0xd>; + }; + + serial@c11084dc { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084dc 0x0 0x18>; + interrupts = <0x0 0x4b 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x69>; + resets = <0x6 0x30>; + }; + + serial@c1108700 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc1108700 0x0 0x18>; + interrupts = <0x0 0x5d 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x6a>; + resets = <0x6 0x4f>; + }; + + serial@c81004e0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004e0 0x0 0x18>; + interrupts = <0x0 0xc5 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x6b>; + }; + + canvas { + compatible = "amlogic, meson, canvas"; + dev_name = "amlogic-canvas"; + status = "ok"; + reg = <0x0 0xc8838000 0x0 0x400>; + }; + + rdma { + compatible = "amlogic, meson, rdma"; + dev_name = "amlogic-rdma"; + status = "ok"; + interrupts = <0x0 0x59 0x1>; + interrupt-names = "rdma"; + }; + + dwc3@c9000000 { + compatible = "synopsys, dwc3"; + reg = <0x0 0xc9000000 0x0 0x100000>; + interrupts = <0x0 0x1e 0x4>; + usb-phy = <0x6c 0x6d>; + cpu-type = "gxl"; + clock-src = "usb3.0"; + }; + + usb2phy@d0078000 { + compatible = "amlogic, amlogic-new-usb2"; + portnum = <0x3>; + reg = <0x0 0xd0078000 0x0 0x80>; + linux,phandle = <0x6c>; + phandle = <0x6c>; + }; + + usb3phy@d0078080 { + compatible = "amlogic, amlogic-new-usb3"; + portnum = <0x0>; + reg = <0x0 0xd0078080 0x0 0x20>; + interrupts = <0x0 0x10 0x4>; + otg = <0x1>; + gpio-vbus-power = "GPIOAO_5"; + gpios = <0x37 0x5 0x0>; + linux,phandle = <0x6d>; + phandle = <0x6d>; + }; + + dwc2_a { + compatible = "amlogic,dwc2"; + device_name = "dwc2_a"; + reg = <0x0 0xc9100000 0x0 0x40000>; + status = "okay"; + interrupts = <0x0 0x1f 0x4>; + pl-periph-id = <0x0>; + clock-src = "usb0"; + port-id = <0x0>; + port-type = <0x2>; + port-speed = <0x0>; + port-config = <0x0>; + port-dma = <0x0>; + port-id-mode = <0x0>; + usb-fifo = <0x2d8>; + cpu-type = "gxl"; + controller-type = <0x2>; + phy-reg = <0xd0078000>; + phy-reg-size = <0xa0>; + resets = <0x6 0x3a 0x6 0x48 0x6 0x36>; + reset-names = "usb_general", "usb1", "usb1_to_ddr"; + }; + + I2S { + #sound-dai-cells = <0x0>; + resets = <0x6 0x26 0x6 0x12 0x6 0x28 0x6 0x29 0x6 0x2a 0x6 0x2b 0x6 0x2c 0x6 0x2d 0x6 0x2f 0x6 0x8e 0x6 0x22>; + reset-names = "top_glue", "aud_buf", "i2s_out", "amclk_measure", "aififo2", "aud_mixer", "mixer_reg", "adc", "top_level", "aoclk", "aud_in"; + clocks = <0x6 0x21 0x6 0x22>; + clock-names = "mpll2", "mclk"; + compatible = "amlogic, aml-i2s-dai"; + linux,phandle = <0x79>; + phandle = <0x79>; + }; + + SPDIF { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-spdif-dai"; + resets = <0x6 0x27 0x6 0x90>; + reset-names = "iec958", "iec958_amclk"; + clocks = <0x6 0x20 0x6 0x24 0x6 0x22 0x6 0x25 0x6 0xa>; + clock-names = "mpll1", "i958", "mclk", "spdif", "clk_81"; + linux,phandle = <0x7a>; + phandle = <0x7a>; + }; + + PCM { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-pcm-dai"; + pinctrl-names = "aml_audio_btpcm"; + pinctrl-0 = <0x6e>; + clocks = <0x6 0x1f 0x6 0x2a 0x6 0x2b>; + clock-names = "mpll0", "pcm_mclk", "pcm_sclk"; + pcm_mode = <0x1>; + linux,phandle = <0x7b>; + phandle = <0x7b>; + }; + + i2s_platform { + compatible = "amlogic, aml-i2s"; + interrupts = <0x0 0x1d 0x1>; + linux,phandle = <0x77>; + phandle = <0x77>; + }; + + pcm_platform { + compatible = "amlogic, aml-pcm"; + linux,phandle = <0x78>; + phandle = <0x78>; + }; + + spdif_codec { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-spdif-codec"; + pinctrl-names = "aml_audio_spdif"; + pinctrl-0 = <0x6f>; + linux,phandle = <0x7d>; + phandle = <0x7d>; + }; + + pcm_codec { + #sound-dai-cells = <0x0>; + compatible = "amlogic, pcm2BT-codec"; + linux,phandle = <0x7e>; + phandle = <0x7e>; + }; + + dummy { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml_dummy_codec"; + status = "disable"; + }; + + t9015 { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml_codec_T9015"; + reg = <0x0 0xc8832000 0x0 0x14>; + status = "okay"; + linux,phandle = <0x7c>; + phandle = <0x7c>; + }; + + aml_m8_snd { + compatible = "aml, aml_snd_m8"; + status = "okay"; + aml-sound-card,format = "i2s"; + aml_sound_card,name = "AML-M8AUDIO"; + aml,audio-routing = "Ext Spk", "LOUTL", "Ext Spk", "LOUTR"; + mute_gpio-gpios = <0x38 0x15 0x0>; + mute_inv; + hp_disable; + hp_paraments = <0x320 0x12c 0x0 0x5 0x1>; + pinctrl-names = "aml_snd_m8"; + pinctrl-0 = <0x70>; + cpu_list = <0x71 0x72 0x73>; + codec_list = <0x74 0x75 0x76>; + plat_list = <0x77 0x77 0x78>; + + cpudai0 { + sound-dai = <0x79>; + linux,phandle = <0x71>; + phandle = <0x71>; + }; + + cpudai1 { + sound-dai = <0x7a>; + linux,phandle = <0x72>; + phandle = <0x72>; + }; + + cpudai2 { + sound-dai = <0x7b>; + linux,phandle = <0x73>; + phandle = <0x73>; + }; + + codec0 { + sound-dai = <0x7c>; + linux,phandle = <0x74>; + phandle = <0x74>; + }; + + codec1 { + sound-dai = <0x7d>; + linux,phandle = <0x75>; + phandle = <0x75>; + }; + + codec2 { + sound-dai = <0x7e>; + linux,phandle = <0x76>; + phandle = <0x76>; + }; + }; + + gpio_keypad { + compatible = "amlogic, gpio_keypad"; + status = "okay"; + scan_period = <0x14>; + key_num = <0x1>; + key_name = "power"; + key_code = <0x74>; + key_pin = <0x37 0x2 0x0>; + irq_keyup = <0x6>; + irq_keydown = <0x7>; + }; + + adc_keypad { + compatible = "amlogic, adc_keypad"; + status = "okay"; + key_name = "home"; + key_num = <0x1>; + key_code = <0x66>; + key_chan = <0x0>; + key_val = <0xa>; + key_tolerance = <0x28>; + }; + + aml-sensor@0 { + compatible = "amlogic, aml-thermal"; + device_name = "thermal"; + #thermal-sensor-cells = <0x1>; + linux,phandle = <0x7f>; + phandle = <0x7f>; + + cooling_devices { + + cpufreq_cool_cluster0 { + min_state = <0xf4240>; + dyn_coeff = <0x8c>; + cluster_id = <0x0>; + node_name = "cluster0"; + device_type = "cpufreq"; + }; + + cpufreq_cool_cluster1 { + min_state = <0x7a120>; + dyn_coeff = <0x8c>; + cluster_id = <0x1>; + node_name = "cluster1"; + device_type = "cpufreq"; + }; + + cpucore_cool_cluster0 { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x0>; + node_name = "cpu_core_cluster0"; + device_type = "cpucore"; + }; + + cpucore_cool_cluster1 { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x1>; + node_name = "cpu_core_cluster1"; + device_type = "cpucore"; + }; + + gpufreq_cool { + min_state = <0x190>; + dyn_coeff = <0x1b5>; + cluster_id = <0x0>; + node_name = "t82x"; + device_type = "gpufreq"; + }; + + gpucore_cool { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x0>; + node_name = "thermal_gpu_cores"; + device_type = "gpucore"; + }; + }; + + cpu_core_cluster0 { + #cooling-cells = <0x2>; + linux,phandle = <0x83>; + phandle = <0x83>; + }; + + cpu_core_cluster1 { + #cooling-cells = <0x2>; + linux,phandle = <0x84>; + phandle = <0x84>; + }; + + thermal_gpu_cores { + #cooling-cells = <0x2>; + linux,phandle = <0x86>; + phandle = <0x86>; + }; + }; + + thermal-zones { + + soc_thermal { + polling-delay = <0x3e8>; + polling-delay-passive = <0x64>; + sustainable-power = <0x992>; + thermal-sensors = <0x7f 0x3>; + + trips { + + trip-point@0 { + temperature = <0x11170>; + hysteresis = <0x3e8>; + type = "passive"; + }; + + trip-point@1 { + temperature = <0x13880>; + hysteresis = <0x3e8>; + type = "passive"; + linux,phandle = <0x80>; + phandle = <0x80>; + }; + + trip-point@2 { + temperature = <0x14c08>; + hysteresis = <0x1388>; + type = "hot"; + }; + + trip-point@3 { + temperature = <0x3f7a0>; + hysteresis = <0x3e8>; + type = "critical"; + }; + }; + + cooling-maps { + + cpufreq_cooling_map0 { + trip = <0x80>; + cooling-device = <0x81 0x0 0x4>; + contribution = <0x400>; + }; + + cpufreq_cooling_map1 { + trip = <0x80>; + cooling-device = <0x82 0x0 0x4>; + contribution = <0x400>; + }; + + cpucore_cooling_map0 { + trip = <0x80>; + cooling-device = <0x83 0x0 0x3>; + contribution = <0x400>; + }; + + cpucore_cooling_map1 { + trip = <0x80>; + cooling-device = <0x84 0x0 0x3>; + contribution = <0x400>; + }; + + gpufreq_cooling_map { + trip = <0x80>; + cooling-device = <0x85 0x0 0x4>; + contribution = <0x400>; + }; + + gpucore_cooling_map { + trip = <0x80>; + cooling-device = <0x86 0x0 0x2>; + contribution = <0x400>; + }; + }; + }; + }; +}; diff --git a/arch/arm64/boot/dts/kvim2_nougat.dts b/arch/arm64/boot/dts/kvim2_nougat.dts new file mode 100644 index 0000000000000..26143f2ef8af0 --- /dev/null +++ b/arch/arm64/boot/dts/kvim2_nougat.dts @@ -0,0 +1,2427 @@ +/dts-v1/; + +/ { + model = "Amlogic"; + compatible = "kvim"; + amlogic-dt-id = "kvim"; + interrupt-parent = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + + t82x { + compatible = "arm,malit602", "arm,malit60x", "arm,malit6xx", "arm,mali-midgard"; + #cooling-cells = <0x2>; + reg = <0x0 0xd00c0000 0x0 0x100000 0x0 0xc1104440 0x0 0x1000 0x0 0xc8100000 0x0 0x1000 0x0 0xc883c000 0x0 0x1000 0x0 0xc1104440 0x0 0x1000>; + interrupt-parent = <0x1>; + interrupts = <0x0 0xa0 0x4 0x0 0xa1 0x4 0x0 0xa2 0x4>; + interrupt-names = "GPU", "MMU", "JOB"; + num_of_pp = <0x3>; + sc_mpp = <0x1>; + operating-points = <0xa2c2a 0xf4240 0x7a120 0xf4240 0x61a80 0xf4240 0x45c12 0xf4240 0x3d090 0xf4240 0x1e848 0xf4240>; + tbl = <0x2 0x3 0x4 0x5 0x5>; + clocks = <0x6 0x8 0x6 0x9 0x6 0x11 0x6 0x12 0x6 0x1e 0x6 0x15 0x6 0x13 0x6 0x14>; + clock-names = "fclk_div3", "fclk_div4", "fclk_div5", "fclk_div7", "gp0_pll", "clk_gpu", "clk_gpu_0", "clk_gpu_1"; + linux,phandle = <0x81>; + phandle = <0x81>; + + clk125_cfg { + clk_freq = <0x7735940>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x1e 0x78>; + }; + + dvfs250_cfg { + clk_freq = <0xee6b280>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x50 0xaa>; + }; + + dvfs285_cfg { + clk_freq = <0x1107a650>; + clk_parent = "fclk_div7"; + clkp_freq = <0x1107a650>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x64 0xbe>; + linux,phandle = <0x2>; + phandle = <0x2>; + }; + + dvfs400_cfg { + clk_freq = <0x17d78400>; + clk_parent = "fclk_div5"; + clkp_freq = <0x17d78400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x98 0xcf>; + linux,phandle = <0x3>; + phandle = <0x3>; + }; + + dvfs500_cfg { + clk_freq = <0x1dcd6500>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xb4 0xdc>; + linux,phandle = <0x4>; + phandle = <0x4>; + }; + + dvfs666_cfg { + clk_freq = <0x27b25a80>; + clk_parent = "fclk_div3"; + clkp_freq = <0x27b25a80>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xd2 0xec>; + linux,phandle = <0x5>; + phandle = <0x5>; + }; + + dvfs800_cfg { + clk_freq = <0x2f34f600>; + clk_parent = "gp0_pll"; + clkp_freq = <0x2f34f600>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xe6 0xff>; + }; + }; + + gpu_clk@c883c00 { + compatible = "meson, gpu-clkgen-1.00.a"; + #clock-cells = <0x0>; + reg = <0x0 0xc883c000 0x0 0x1000>; + clocks = <0x6 0x8 0x6 0x9 0x6 0x11 0x6 0x12 0x6 0x1e 0x6 0x15 0x6 0x13 0x6 0x14>; + clock-names = "fclk_div3", "fclk_div4", "fclk_div5", "fclk_div7", "gp0_pll", "clk_gpu", "clk_gpu_0", "clk_gpu_1"; + clock-output-names = "clk_mali"; + tbl = <0x7 0x8 0x9 0xa 0xb 0xc>; + + clk125_cfg { + clk_freq = <0x7735940>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x1e 0x78>; + linux,phandle = <0x7>; + phandle = <0x7>; + }; + + clk250_cfg { + clk_freq = <0xee6b280>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x50 0xaa>; + linux,phandle = <0x8>; + phandle = <0x8>; + }; + + clk285_cfg { + clk_freq = <0x1107a650>; + clk_parent = "fclk_div7"; + clkp_freq = <0x1107a650>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x64 0xbe>; + linux,phandle = <0x9>; + phandle = <0x9>; + }; + + clk400_cfg { + clk_freq = <0x17d78400>; + clk_parent = "fclk_div5"; + clkp_freq = <0x17d78400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0x98 0xcf>; + linux,phandle = <0xa>; + phandle = <0xa>; + }; + + clk500_cfg { + clk_freq = <0x1dcd6500>; + clk_parent = "fclk_div4"; + clkp_freq = <0x1dcd6500>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xb4 0xdc>; + linux,phandle = <0xb>; + phandle = <0xb>; + }; + + clk666_cfg { + clk_freq = <0x27bc8410>; + clk_parent = "fclk_div3"; + clkp_freq = <0x27bc8410>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xd2 0xec>; + linux,phandle = <0xc>; + phandle = <0xc>; + }; + + clk720_cfg { + clk_freq = <0x2aea5400>; + clk_parent = "gp0_pll"; + clkp_freq = <0x2aea5400>; + voltage = <0x47e>; + keep_count = <0x5>; + threshold = <0xe6 0xff>; + }; + }; + + cpus { + #address-cells = <0x2>; + #size-cells = <0x0>; + + cpu-map { + + cluster0 { + #cooling-cells = <0x2>; + linux,phandle = <0x7d>; + phandle = <0x7d>; + + core0 { + cpu = <0xd>; + }; + + core1 { + cpu = <0xe>; + }; + + core2 { + cpu = <0xf>; + }; + + core3 { + cpu = <0x10>; + }; + }; + + cluster1 { + #cooling-cells = <0x2>; + linux,phandle = <0x7e>; + phandle = <0x7e>; + + core0 { + cpu = <0x11>; + }; + + core1 { + cpu = <0x12>; + }; + + core2 { + cpu = <0x13>; + }; + + core3 { + cpu = <0x14>; + }; + }; + }; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xd>; + phandle = <0xd>; + }; + + cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xe>; + phandle = <0xe>; + }; + + cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0xf>; + phandle = <0xf>; + }; + + cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + clocks = <0x15 0x0>; + clock-names = "cpu-cluster.0"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x10>; + phandle = <0x10>; + }; + + cpu@100 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x100>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x11>; + phandle = <0x11>; + }; + + cpu@101 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x101>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x12>; + phandle = <0x12>; + }; + + cpu@102 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x102>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x13>; + phandle = <0x13>; + }; + + cpu@103 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0 0x103>; + enable-method = "psci"; + clocks = <0x15 0x1>; + clock-names = "cpu-cluster.1"; + cpu-idle-states = <0x16 0x17>; + linux,phandle = <0x14>; + phandle = <0x14>; + }; + + idle-states { + entry-method = "arm,psci"; + + cpu-sleep-0 { + compatible = "arm, idle-state"; + arm,psci-suspend-param = <0x10000>; + local-timer-stop; + entry-latency-us = <0x1f40>; + exit-latency-us = <0x1f40>; + min-residency-us = <0x4e20>; + linux,phandle = <0x16>; + phandle = <0x16>; + }; + + cluster-sleep-0 { + compatible = "arm, idle-state"; + arm,psci-suspend-param = <0x1010000>; + local-timer-stop; + entry-latency-us = <0x1f40>; + exit-latency-us = <0x1f40>; + min-residency-us = <0x61a8>; + linux,phandle = <0x17>; + phandle = <0x17>; + }; + }; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x1 0xd 0xff01 0x1 0xe 0xff01 0x1 0xb 0xff01 0x1 0xa 0xff01>; + }; + + timer_bc { + compatible = "arm, meson-bc-timer"; + reg = <0x0 0xc1109990 0x0 0x4 0x0 0xc1109994 0x0 0x4>; + timer_name = "Meson TimerF"; + clockevent-rating = <0x12c>; + clockevent-shift = <0x14>; + clockevent-features = <0x23>; + interrupts = <0x0 0x3c 0x1>; + bit_enable = <0x10>; + bit_mode = <0xc>; + bit_resolution = <0x0>; + }; + + arm_pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0x0 0x89 0x4 0x0 0x8a 0x4 0x0 0x99 0x4 0x0 0x9a 0x4>; + }; + + pm { + compatible = "amlogic, pm"; + device_name = "aml_pm"; + gxbaby-suspend; + reg = <0x0 0xc81000a8 0x0 0x4 0x0 0xc810023c 0x0 0x4>; + }; + + interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <0x3>; + #address-cells = <0x0>; + interrupt-controller; + reg = <0x0 0xc4301000 0x0 0x1000 0x0 0xc4302000 0x0 0x100>; + interrupts = <0x1 0x9 0xf04>; + linux,phandle = <0x1>; + phandle = <0x1>; + }; + + aml_restart { + compatible = "aml, restart"; + sys_reset = <0x84000009>; + sys_poweroff = <0x84000008>; + }; + + psci { + compatible = "arm,psci"; + method = "smc"; + cpu_suspend = <0xc4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xc4000003>; + migrate = <0xc4000005>; + }; + + secmon { + compatible = "amlogic, secmon"; + memory-region = <0x18>; + in_base_func = <0x82000020>; + out_base_func = <0x82000021>; + }; + + securitykey { + compatible = "aml, securitykey"; + storage_query = <0x82000060>; + storage_read = <0x82000061>; + storage_write = <0x82000062>; + storage_tell = <0x82000063>; + storage_verify = <0x82000064>; + storage_status = <0x82000065>; + storage_list = <0x82000067>; + storage_remove = <0x82000068>; + storage_in_func = <0x82000023>; + storage_out_func = <0x82000024>; + storage_block_func = <0x82000025>; + storage_size_func = <0x82000027>; + storage_set_enctype = <0x8200006a>; + storage_get_enctype = <0x8200006b>; + storage_version = <0x8200006c>; + }; + + cpu_iomap { + compatible = "amlogic, iomap"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_cbus_base { + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + + io_apb_base { + reg = <0x0 0xd0000000 0x0 0x200000>; + }; + + io_aobus_base { + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + }; + + cpufreq { + compatible = "arm, scpi-cpufreq"; + }; + + amlogic-watchdog { + compatible = "amlogic, gx-wdt"; + status = "disable"; + default_timeout = <0xa>; + reset_watchdog_method = <0x1>; + reset_watchdog_time = <0x2>; + shutdown_timeout = <0xa>; + firmware_timeout = <0x6>; + suspend_timeout = <0x6>; + reg = <0x0 0xc11098d0 0x0 0x10>; + clocks = <0x6 0x2>; + }; + + amlogic-jtag { + compatible = "amlogic, jtag"; + status = "disable"; + pinctrl-names = "jtag_apao_pins", "jtag_apee_pins"; + pinctrl-0 = <0x19>; + pinctrl-1 = <0x1a>; + }; + + meson_clock { + compatible = "amlogic, gxl-clock"; + reg = <0x0 0xc883c000 0x0 0x1000 0x0 0xc8100000 0x0 0x1000>; + #clock-cells = <0x1>; + #reset-cells = <0x1>; + sys_max = <0x5b8d8000>; + linux,phandle = <0x6>; + phandle = <0x6>; + }; + + cpu_info { + compatible = "amlogic, cpuinfo"; + cpuinfo_cmd = <0x82000044>; + }; + + pinmux { + compatible = "amlogic, pinmux-gxl"; + dev_name = "pinmux"; + #pinmux-cells = <0x2>; + #address-cells = <0x2>; + #size-cells = <0x2>; + reg = <0x0 0xc1109880 0x0 0x10>; + ranges; + + banks@c11080b0 { + reg = <0x0 0xc88344b0 0x0 0x28 0x0 0xc88344e8 0x0 0x14 0x0 0xc8834520 0x0 0x14 0x0 0xc8834430 0x0 0x40>; + reg-names = "mux", "pull", "pull-enable", "gpio"; + gpio-controller; + #gpio-cells = <0x2>; + linux,phandle = <0x34>; + phandle = <0x34>; + }; + + ao-bank@c1108030 { + reg = <0x0 0xc8100014 0x0 0x8 0x0 0xc810002c 0x0 0x4 0x0 0xc8100024 0x0 0x8>; + reg-names = "mux", "pull", "gpio"; + gpio-controller; + #gpio-cells = <0x2>; + linux,phandle = <0x33>; + phandle = <0x33>; + }; + + external_eth_pins { + amlogic,setmask = <0x4 0xfffc00>; + amlogic,clrmask = <0x4 0x3fc 0x3 0xffcff800>; + amlogic,pins = "GPIOZ_0", "GPIOZ_1", "GPIOZ_2", "GPIOZ_3", "GPIOZ_4", "GPIOZ_5", "GPIOZ_6", "GPIOZ_7", "GPIOZ_8", "GPIOZ_9", "GPIOZ_10", "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + linux,phandle = <0x37>; + phandle = <0x37>; + }; + + internal_eth_pins { + amlogic,setmask = <0x4 0x3000000>; + amlogic,clrmask = <0x3 0x300000>; + amlogic,pins = "GPIOZ_14", "GPIOZ_15"; + }; + + jtag_apao_pin { + amlogic,clrmask = <0x6 0x7fe0000>; + amlogic,pins = "GPIOH_6", "GPIOH_7", "GPIOH_8", "GPIOH_9"; + linux,phandle = <0x19>; + phandle = <0x19>; + }; + + jtag_apee_pin { + amlogic,clrmask = <0x6 0x3c>; + amlogic,pins = "CARD_0", "CARD_1", "CARD_2", "CARD_3"; + linux,phandle = <0x1a>; + phandle = <0x1a>; + }; + + remote_pin { + amlogic,setmask = <0x10 0x1>; + amlogic,pins = "GPIOAO_7"; + linux,phandle = <0x26>; + phandle = <0x26>; + }; + + ao_uart { + amlogic,setmask = <0x10 0x1800>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + }; + + ao_b_uart { + amlogic,setmask = <0x10 0x1800000>; + amlogic,pins = "GPIOAO_4", "GPIOAO_5"; + linux,phandle = <0x67>; + phandle = <0x67>; + }; + + a_uart { + amlogic,setmask = <0x5 0xf0000>; + amlogic,clrmask = <0x5 0x3c0>; + amlogic,pins = "GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15"; + linux,phandle = <0x64>; + phandle = <0x64>; + }; + + b_uart { + amlogic,setmask = <0x2 0x18000>; + amlogic,pins = "GPIODV_24", "GPIODV_25"; + linux,phandle = <0x65>; + phandle = <0x65>; + }; + + c_uart { + amlogic,setmask = <0x5 0x3000>; + amlogic,pins = "GPIOX_8", "GPIOX_9"; + linux,phandle = <0x66>; + phandle = <0x66>; + }; + + wifi_32k_pins { + amlogic,setmask = <0x5 0x8000>; + amlogic,pins = "GPIOX_16"; + linux,phandle = <0x3d>; + phandle = <0x3d>; + }; + + sd_clk_cmd_pins { + amlogic,setmask = <0x6 0xc 0x10 0x1800>; + amlogic,pins = "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x43>; + phandle = <0x43>; + }; + + sd_all_pins { + amlogic,setmask = <0x6 0x3f 0x10 0x1800>; + amlogic,clrmask = <0x6 0xfc0>; + amlogic,pins = "CARD_0", "CARD_1", "CARD_2", "CARD_3", "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x44>; + phandle = <0x44>; + }; + + sd_1bit_pins { + amlogic,setmask = <0x6 0x1c 0x10 0x1800>; + amlogic,clrmask = <0x6 0xcc3>; + amlogic,pins = "CARD_1", "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x45>; + phandle = <0x45>; + }; + + sd_clk_cmd_uart_pins { + amlogic,setmask = <0x6 0x30c>; + amlogic,clrmask = <0x6 0xcc3 0x10 0x1800>; + amlogic,pins = "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x46>; + phandle = <0x46>; + }; + + sd_1bit_uart_pins { + amlogic,setmask = <0x6 0x31c>; + amlogic,clrmask = <0x6 0xcc3 0x10 0x1800>; + amlogic,pins = "CARD_1", "CARD_2", "CARD_3"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x47>; + phandle = <0x47>; + }; + + sd_to_ao_uart_pins { + amlogic,setmask = <0x10 0x1800>; + amlogic,clrmask = <0x6 0x300>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x48>; + phandle = <0x48>; + }; + + ao_to_sd_uart_pins { + amlogic,setmask = <0x6 0x300>; + amlogic,clrmask = <0x10 0x1800 0x6 0xcc3>; + amlogic,pins = "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x49>; + phandle = <0x49>; + }; + + ao_to_sd_jtag_pins { + amlogic,setmask = <0x6 0x300>; + amlogic,clrmask = <0x6 0xcff 0x10 0x1800>; + amlogic,pins = "CARD_4", "CARD_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4a>; + phandle = <0x4a>; + }; + + sd_to_ao_jtag_pins { + amlogic,setmask = <0x10 0x1800>; + amlogic,clrmask = <0x6 0xfc0>; + amlogic,pins = "GPIOAO_0", "GPIOAO_1"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4b>; + phandle = <0x4b>; + }; + + emmc_clk_cmd_pins { + amlogic,setmask = <0x7 0x60000000>; + amlogic,clrmask = <0x7 0xe0>; + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x3f>; + phandle = <0x3f>; + }; + + emmc_conf_pull_up { + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_10"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x40>; + phandle = <0x40>; + }; + + emmc_conf_pull_done { + amlogic,pins = "BOOT_15"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x41>; + phandle = <0x41>; + }; + + emmc_all_pins { + amlogic,setmask = <0x7 0xf0000000>; + amlogic,clrmask = <0x7 0xe0>; + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_10", "BOOT_15"; + amlogic,enable-output = <0x1>; + linux,phandle = <0x42>; + phandle = <0x42>; + }; + + sdio_clk_cmd_pins { + amlogic,setmask = <0x5 0xc000000>; + amlogic,pins = "GPIOX_4", "GPIOX_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4c>; + phandle = <0x4c>; + }; + + sdio_all_pins { + amlogic,setmask = <0x5 0xfc000000>; + amlogic,pins = "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", "GPIOX_4", "GPIOX_5"; + amlogic,enable-output = <0x1>; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4d>; + phandle = <0x4d>; + }; + + conf_nand_pulldown { + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_15"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4e>; + phandle = <0x4e>; + }; + + conf_nand_pullup { + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + linux,phandle = <0x4f>; + phandle = <0x4f>; + }; + + all_nand_pins { + amlogic,setmask = <0x7 0x800000ff>; + amlogic,clrmask = <0x7 0x70ffbc00>; + amlogic,pins = "BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4", "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_9", "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14", "BOOT_15"; + amlogic,enable-output = <0x1>; + linux,phandle = <0x50>; + phandle = <0x50>; + }; + + nand_cs { + amlogic,setmask = <0x7 0xc0>; + amlogic,clrmask = <0x7 0x40040000>; + amlogic,pins = "BOOT_8", "BOOT_9"; + linux,phandle = <0x51>; + phandle = <0x51>; + }; + + hdmitx_hpd { + amlogic,setmask = <0x6 0x80000000>; + amlogic,pins = "GPIOH_0"; + linux,phandle = <0x61>; + phandle = <0x61>; + }; + + hdmitx_ddc { + amlogic,setmask = <0x6 0x30000000>; + amlogic,pins = "GPIOH_1", "GPIOH_2"; + linux,phandle = <0x62>; + phandle = <0x62>; + }; + + hdmitx_aocec { + amlogic,setmask = <0x10 0x8000>; + amlogic,clrmask = <0x10 0x24000 0x11 0x1>; + amlogic,pins = "GPIOAO_8"; + linux,phandle = <0x63>; + phandle = <0x63>; + }; + + hdmitx_eecec { + amlogic,setmask = <0x10 0x4000>; + amlogic,clrmask = <0x10 0x28000 0x11 0x1>; + amlogic,pins = "GPIOAO_8"; + }; + + ao_i2c { + amlogic,setmask = <0x10 0x60>; + amlogic,clrmask = <0x10 0x1800006>; + amlogic,pins = "GPIOAO_4", "GPIOAO_5"; + linux,phandle = <0x1b>; + phandle = <0x1b>; + }; + + a_i2c { + amlogic,setmask = <0x1 0xc000>; + amlogic,clrmask = <0x3 0x18 0x2 0x18000 0x2 0xc0 0x1 0x600000>; + amlogic,pins = "GPIODV_24", "GPIODV_25"; + linux,phandle = <0x1c>; + phandle = <0x1c>; + }; + + b_i2c { + amlogic,setmask = <0x1 0x3000>; + amlogic,clrmask = <0x2 0x6000 0x1 0x1c0000>; + amlogic,pins = "GPIODV_26", "GPIODV_27"; + linux,phandle = <0x1d>; + phandle = <0x1d>; + }; + + c_i2c { + amlogic,setmask = <0x1 0xc00>; + amlogic,clrmask = <0x2 0x1800 0x1 0x200 0x2 0x20>; + amlogic,pins = "GPIODV_28", "GPIODV_29"; + linux,phandle = <0x1e>; + phandle = <0x1e>; + }; + + c_i2c_pin1 { + amlogic,setmask = <0x1 0x30000>; + amlogic,clrmask = <0x1 0x2000000 0x3 0x20>; + amlogic,pins = "GPIODV_18", "GPIODV_19"; + }; + + d_i2c { + amlogic,setmask = <0x5 0x30>; + amlogic,clrmask = <0x5 0x300c03 0x6 0x3>; + amlogic,pins = "GPIOX_10", "GPIOX_11"; + linux,phandle = <0x1f>; + phandle = <0x1f>; + }; + + spicc_pins_z11z12z13 { + amlogic,setmask = <0x4 0x1c>; + amlogic,clrmask = <0x3 0x800 0x4 0x1c00>; + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + }; + + spicc_pulldown_z11z12z13 { + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + }; + + spicc_pullup_z11z12z13 { + amlogic,pins = "GPIOZ_11", "GPIOZ_12", "GPIOZ_13"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + }; + + spicc_pins_x8x9x11 { + amlogic,setmask = <0x5 0xd>; + amlogic,clrmask = <0x5 0xd03430 0x6 0xd>; + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + }; + + spicc_pulldown_x8x9x11 { + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + amlogic,pullup = <0x0>; + amlogic,pullupen = <0x1>; + }; + + spicc_pullup_x8x9x11 { + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_11"; + amlogic,pullup = <0x1>; + amlogic,pullupen = <0x1>; + }; + + audio_pin { + amlogic,setmask = <0x6 0x7800000>; + amlogic,clrmask = <0x6 0x7e0000>; + amlogic,pins = "GPIOH_6", "GPIOH_7", "GPIOH_8", "GPIOH_9"; + linux,phandle = <0x6c>; + phandle = <0x6c>; + }; + + audio_pin1 { + amlogic,setmask = <0x6 0x10000000>; + amlogic,clrmask = <0x6 0x8000000>; + amlogic,pins = "GPIOH_4"; + linux,phandle = <0x6b>; + phandle = <0x6b>; + }; + + audio_btpcm_pins { + amlogic,setmask = <0x5 0xf00000>; + amlogic,clrmask = <0x5 0x3c33>; + amlogic,pins = "GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11"; + linux,phandle = <0x6a>; + phandle = <0x6a>; + }; + }; + + cpu_version { + reg = <0x0 0xc8100220 0x0 0x4>; + }; + + meson_clk_msr { + compatible = "amlogic, gxl_measure"; + reg = <0x0 0xc110875c 0x0 0x4 0x0 0xc1108764 0x0 0x4>; + }; + + i2c@c8100500 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-AO"; + status = "disabled"; + reg = <0x0 0xc8100500 0x0 0x1d>; + device_id = <0x0>; + pinctrl-names = "default"; + pinctrl-0 = <0x1b>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c1108500 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-A"; + status = "okay"; + reg = <0x0 0xc1108500 0x0 0x20>; + device_id = <0x1>; + pinctrl-names = "default"; + pinctrl-0 = <0x1c>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c11087c0 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-B"; + status = "okay"; + reg = <0x0 0xc11087c0 0x0 0x20>; + device_id = <0x2>; + pinctrl-names = "default"; + pinctrl-0 = <0x1d>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x186a0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + + khadas-hym8563 { + compatible = "khadas-hym8563"; + reg = <0x51>; + }; + }; + + i2c@c11087e0 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-C"; + status = "disabled"; + reg = <0x0 0xc11087e0 0x0 0x20>; + device_id = <0x3>; + pinctrl-names = "default"; + pinctrl-0 = <0x1e>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + i2c@c1108d20 { + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-D"; + status = "disabled"; + reg = <0x0 0xc1108d20 0x0 0x20>; + device_id = <0x4>; + pinctrl-names = "default"; + pinctrl-0 = <0x1f>; + #address-cells = <0x1>; + #size-cells = <0x0>; + use_pio = <0x0>; + master_i2c_speed = <0x493e0>; + clocks = <0x6 0xa>; + clock-names = "clk_i2c"; + resets = <0x6 0x9>; + }; + + efuse { + compatible = "amlogic, efuse"; + read_cmd = <0x82000030>; + write_cmd = <0x82000031>; + get_max_cmd = <0x82000033>; + key = <0x20>; + resets = <0x6 0x3e>; + reset-names = "efuse_clk"; + status = "ok"; + }; + + efusekey { + keynum = <0x4>; + key0 = <0x21>; + key1 = <0x22>; + key2 = <0x23>; + key3 = <0x24>; + linux,phandle = <0x20>; + phandle = <0x20>; + + key_0 { + keyname = "mac"; + offset = <0x0>; + size = <0xc>; + linux,phandle = <0x21>; + phandle = <0x21>; + }; + + key_1 { + keyname = "mac_bt"; + offset = <0xc>; + size = <0xc>; + linux,phandle = <0x22>; + phandle = <0x22>; + }; + + key_2 { + keyname = "mac_wifi"; + offset = <0x18>; + size = <0xc>; + linux,phandle = <0x23>; + phandle = <0x23>; + }; + + key_3 { + keyname = "usid"; + offset = <0x24>; + size = <0xc>; + linux,phandle = <0x24>; + phandle = <0x24>; + }; + }; + + mhu@c883c400 { + compatible = "amlogic, meson_mhu"; + reg = <0x0 0xc883c400 0x0 0x4c 0x0 0xc8013000 0x0 0x800>; + interrupts = <0x0 0xd1 0x8 0x0 0xd2 0x8>; + #mbox-cells = <0x1>; + mbox-names = "cpu_to_scp_low", "cpu_to_scp_high"; + mboxes = <0x25 0x0 0x25 0x1>; + linux,phandle = <0x25>; + phandle = <0x25>; + }; + + scpi_clocks { + compatible = "arm,scpi-clks"; + + scpi_clocks@0 { + compatible = "arm,scpi-clk-indexed"; + #clock-cells = <0x1>; + clock-indices = <0x0 0x1>; + clock-output-names = "vbig", "vlittle"; + linux,phandle = <0x15>; + phandle = <0x15>; + }; + }; + + rc@c8100580 { + compatible = "amlogic, aml_remote"; + dev_name = "meson-remote"; + reg = <0x0 0xc8100580 0x0 0x44 0x0 0xc8100480 0x0 0x20>; + status = "okay"; + protocol = <0x1>; + interrupts = <0x0 0xc4 0x1>; + pinctrl-names = "default"; + pinctrl-0 = <0x26>; + map = <0x27>; + max_frame_time = <0xc8>; + }; + + custom_maps { + mapnum = <0x1>; + map0 = <0x28>; + linux,phandle = <0x27>; + phandle = <0x27>; + + map_0 { + mapname = "khadas-ir"; + customcode = <0xff00>; + release_delay = <0x50>; + fn_key_scancode = <0x5c>; + fn_key_scancode_other = <0x5b>; + cursor_left_scancode = <0xe>; + cursor_right_scancode = <0x1a>; + cursor_up_scancode = <0x3>; + cursor_down_scancode = <0x2>; + cursor_ok_scancode = <0x7>; + size = <0xd>; + keymap = <0x140074 0x13008b 0x30067 0x2006c 0xe0069 0x1a006a 0x700e8 0x580072 0x5c003f 0x5b003f 0xb0073 0x1009e 0x480066>; + linux,phandle = <0x28>; + phandle = <0x28>; + }; + }; + + rng { + compatible = "amlogic,meson-rng"; + reg = <0x0 0xc8834000 0x0 0x4>; + }; + + audio_data { + compatible = "amlogic, audio_data"; + query_licence_cmd = <0x82000050>; + status = "okay"; + }; + + saradc { + compatible = "amlogic, saradc"; + status = "okay"; + interrupts = <0x0 0x9 0x1>; + interrupt-names = "saradc_int"; + clocks = <0x6 0x2>; + clock-names = "saradc_clk"; + resets = <0x6 0x56>; + reg = <0x0 0xc1108680 0x0 0x30 0x0 0xc883c3d8 0x0 0x8>; + }; + + defendkey { + compatible = "amlogic, defendkey"; + reg = <0x0 0xc8834500 0x0 0x4>; + mem_size = <0x0 0x100000>; + status = "okay"; + }; + + spicc { + compatible = "amlogic, spicc"; + status = "disabled"; + reg = <0x0 0xc1108d80 0x0 0x28>; + resets = <0x6 0x8>; + reset-names = "spicc_clk"; + clocks = <0x6 0xa>; + clock-names = "clk81"; + interrupts = <0x0 0x51 0x1>; + device_id = <0x0>; + }; + + aml_aes { + compatible = "amlogic,aes_dma"; + dev_name = "aml_aes_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aml_tdes { + compatible = "amlogic,des_dma,tdes_dma"; + dev_name = "aml_tdes_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aml_sha { + compatible = "amlogic,sha_dma"; + dev_name = "aml_sha_dma"; + interrupts = <0x0 0xbc 0x1 0x0 0xbd 0x1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + meson-pwm { + compatible = "amlogic, meson-pwm"; + status = "okay"; + #pwm-cells = <0x2>; + pwm-outputs = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf>; + reg = <0x0 0xc1108550 0x0 0x1c 0x0 0xc1108640 0x0 0x1c 0x0 0xc11086c0 0x0 0x1c 0x0 0xc8100550 0x0 0x1c>; + clocks = <0x6 0x2 0x6 0x5 0x6 0x9 0x6 0x8>; + clock-names = "xtal", "vid_pll_clk", "fclk_div4", "fclk_div3"; + clock-select = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0>; + }; + + partitions { + parts = <0xa>; + part-0 = <0x29>; + part-1 = <0x2a>; + part-2 = <0x2b>; + part-3 = <0x2c>; + part-4 = <0x2d>; + part-5 = <0x2e>; + part-6 = <0x2f>; + part-7 = <0x30>; + part-8 = <0x31>; + part-9 = <0x32>; + + logo { + pname = "logo"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x29>; + phandle = <0x29>; + }; + + recovery { + pname = "recovery"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x2a>; + phandle = <0x2a>; + }; + + rsv { + pname = "rsv"; + size = <0x0 0x800000>; + mask = <0x1>; + linux,phandle = <0x2b>; + phandle = <0x2b>; + }; + + tee { + pname = "tee"; + size = <0x0 0x800000>; + mask = <0x1>; + linux,phandle = <0x2c>; + phandle = <0x2c>; + }; + + crypt { + pname = "crypt"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x2d>; + phandle = <0x2d>; + }; + + misc { + pname = "misc"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x2e>; + phandle = <0x2e>; + }; + + boot { + pname = "boot"; + size = <0x0 0x2000000>; + mask = <0x1>; + linux,phandle = <0x2f>; + phandle = <0x2f>; + }; + + system { + pname = "system"; + size = <0x0 0x80000000>; + mask = <0x1>; + linux,phandle = <0x30>; + phandle = <0x30>; + }; + + cache { + pname = "cache"; + size = <0x0 0x20000000>; + mask = <0x2>; + linux,phandle = <0x31>; + phandle = <0x31>; + }; + + data { + pname = "data"; + size = <0xffffffff 0xffffffff>; + mask = <0x4>; + linux,phandle = <0x32>; + phandle = <0x32>; + }; + }; + + aliases { + serial0 = "/serial@c81004c0"; + serial1 = "/serial@c11084c0"; + serial2 = "/serial@c11084dc"; + serial3 = "/serial@c1108700"; + serial4 = "/serial@c81004e0"; + }; + + memory@00000000 { + device_type = "memory"; + linux,usable-memory-2g = <0x0 0x100000 0x0 0x7ff00000>; + linux,usable-memory-3g = <0x0 0x100000 0x0 0xbff00000>; + }; + + reserved-memory { + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + linux,secmon { + compatible = "amlogic, aml_secmon_memory"; + reg = <0x0 0x10000000 0x0 0x200000>; + no-map; + linux,phandle = <0x18>; + phandle = <0x18>; + }; + + linux,secos { + status = "disable"; + compatible = "amlogic, aml_secos_memory"; + reg = <0x0 0x5300000 0x0 0x2000000>; + no-map; + }; + + aml_pstore { + compatible = "amlogic, pstore"; + reg = <0x0 0x7300000 0x0 0x100000>; + no-map; + }; + + linux,di { + compatible = "amlogic, di-mem"; + size = <0x0 0x1e00000>; + linux,phandle = <0x3b>; + phandle = <0x3b>; + }; + + linux,ion-dev { + compatible = "amlogic, idev-mem"; + size = <0x0 0x4000000>; + linux,phandle = <0x38>; + phandle = <0x38>; + }; + + linux,vdin1_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x1000000>; + alignment = <0x0 0x400000>; + linux,phandle = <0x3c>; + phandle = <0x3c>; + }; + + linux,ppmgr { + compatible = "shared-dma-pool"; + size = <0x0 0x0>; + linux,phandle = <0x3a>; + phandle = <0x3a>; + }; + + linux,codec_mm_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0xc000000>; + alignment = <0x0 0x400000>; + linux,contiguous-region; + linux,phandle = <0x35>; + phandle = <0x35>; + }; + + linux,picdec { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x0>; + alignment = <0x0 0x0>; + linux,contiguous-region; + linux,phandle = <0x39>; + phandle = <0x39>; + }; + + linux,codec_mm_reserved { + compatible = "amlogic, codec-mm-reserved"; + size = <0x0 0x4100000>; + alignment = <0x0 0x100000>; + linux,phandle = <0x36>; + phandle = <0x36>; + }; + }; + + sysled { + compatible = "amlogic, sysled"; + dev_name = "sysled"; + status = "okay"; + led_gpio = <0x33 0x9 0x0>; + led_active_low = <0x1>; + }; + + fan { + compatible = "fanctl"; + fan_ctl0 = <0x34 0x3f 0x0>; + fan_ctl1 = <0x34 0x40 0x0>; + trig_temp_level0 = <0x32>; + trig_temp_level1 = <0x3c>; + trig_temp_level2 = <0x46>; + }; + + meson-vout { + compatible = "amlogic, meson-vout"; + dev_name = "meson-vout"; + status = "okay"; + }; + + meson-fb { + compatible = "amlogic, meson-fb"; + dev_name = "meson-fb"; + status = "okay"; + interrupts = <0x0 0x3 0x1 0x0 0x59 0x1>; + interrupt-names = "viu-vsync", "rdma"; + mem_size = <0x1851000 0x100000>; + display_mode_default = "1080p60hz"; + scale_mode = <0x1>; + display_size_default = <0x780 0x438 0x780 0xca8 0x20>; + logo_addr_2g = "0x7d851000"; + logo_addr_3g = "0xbd851000"; + }; + + ge2d { + compatible = "amlogic, ge2d"; + dev_name = "ge2d"; + status = "okay"; + interrupts = <0x0 0x96 0x1>; + interrupt-names = "ge2d"; + clocks = <0x6 0x17 0x6 0x19>; + clock-names = "clk_vapb_0", "clk_ge2d"; + resets = <0x6 0x34>; + reset-names = "ge2d"; + }; + + codec_io { + compatible = "amlogic, codec_io"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_cbus_base { + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + + io_dos_base { + reg = <0x0 0xc8820000 0x0 0x10000>; + }; + + io_hiubus_base { + reg = <0x0 0xc883c000 0x0 0x2000>; + }; + + io_aobus_base { + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + + io_vcbus_base { + reg = <0x0 0xd0100000 0x0 0x40000>; + }; + + io_dmc_base { + reg = <0x0 0xc8838000 0x0 0x400>; + }; + }; + + codec_mm { + compatible = "amlogic, codec, mm"; + memory-region = <0x35 0x36>; + dev_name = "codec_mm"; + status = "okay"; + }; + + ethernet@0xc9410000 { + compatible = "amlogic, gxbb-rgmii-dwmac"; + reg = <0x0 0xc9410000 0x0 0x10000 0x0 0xc8834540 0x0 0x8 0x0 0xc8834558 0x0 0xc>; + interrupts = <0x0 0x8 0x1>; + phy-mode = "rgmii"; + pinctrl-names = "external_eth_pins"; + pinctrl-0 = <0x37>; + rst_pin-gpios = <0x34 0xe 0x0>; + GPIOZ4_pin-gpios = <0x34 0x4 0x0>; + GPIOZ5_pin-gpios = <0x34 0x5 0x0>; + mc_val = <0x1621>; + cali_val = <0x20000>; + resets = <0x6 0x23>; + reset-names = "ethpower"; + interrupt-names = "macirq"; + clocks = <0x6 0xa>; + clock-names = "ethclk81"; + internal_phy = <0x0>; + }; + + mesonstream { + compatible = "amlogic, codec, streambuf"; + dev_name = "mesonstream"; + status = "okay"; + resets = <0x6 0x39 0x6 0x59 0x6 0x24 0x6 0x1>; + reset-names = "parser_top", "vpu_intr", "demux", "vdec"; + }; + + amvideocap { + compatible = "amlogic, amvideocap"; + dev_name = "amvideocap.0"; + status = "okay"; + max_size = <0x8>; + }; + + ion_dev { + compatible = "amlogic, ion_dev"; + memory-region = <0x38>; + }; + + vdec { + compatible = "amlogic, vdec"; + dev_name = "vdec.0"; + status = "okay"; + interrupts = <0x0 0x3 0x1 0x0 0x17 0x1 0x0 0x20 0x1 0x0 0x2b 0x1 0x0 0x2c 0x1 0x0 0x2d 0x1>; + interrupt-names = "vsync", "demux", "parser", "mailbox_0", "mailbox_1", "mailbox_2"; + }; + + picdec { + compatible = "amlogic, picdec"; + memory-region = <0x39>; + dev_name = "picdec"; + status = "okay"; + }; + + ppmgr { + compatible = "amlogic, ppmgr"; + memory-region = <0x3a>; + dev_name = "ppmgr"; + status = "okay"; + }; + + deinterlace { + compatible = "amlogic, deinterlace"; + status = "okay"; + memory-region = <0x3b>; + interrupts = <0x0 0x2e 0x1 0x0 0x6 0x1>; + interrupt-names = "de_irq", "timerc"; + buffer-size = <0x2fd000>; + hw-version = <0x2>; + }; + + vdin0 { + compatible = "amlogic, vdin"; + dev_name = "vdin0"; + status = "ok"; + reserve-iomap = "true"; + flag_cma = <0x1>; + cma_size = <0x10>; + interrupts = <0x0 0x53 0x1>; + rdma-irq = <0x2>; + clocks = <0x6 0x11 0x6 0x29>; + clock-names = "fclk_div5", "cts_vdin_meas_clk"; + vdin_id = <0x0>; + tv_bit_mode = <0x1>; + }; + + vdin1 { + compatible = "amlogic, vdin"; + memory-region = <0x3c>; + dev_name = "vdin1"; + status = "ok"; + reserve-iomap = "true"; + flag_cma = <0x0>; + interrupts = <0x0 0x55 0x1>; + rdma-irq = <0x4>; + clocks = <0x6 0x11 0x6 0x29>; + clock-names = "fclk_div5", "cts_vdin_meas_clk"; + vdin_id = <0x1>; + tv_bit_mode = <0x1>; + }; + + amvdec_656in0 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in0"; + status = "ok"; + reg = <0x0 0xd0048000 0x0 0x7c>; + clocks = <0x6 0x7 0x6 0x26>; + clock-names = "fclk_div2", "cts_bt656_clk0"; + bt656_id = <0x0>; + }; + + amvdec_656in1 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in1"; + status = "ok"; + reg = <0x0 0xd0050000 0x0 0x7c>; + clocks = <0x6 0x7 0x6 0x27>; + clock-names = "fclk_div2", "cts_bt656_clk1"; + bt656_id = <0x1>; + }; + + amlvecm { + compatible = "amlogic, vecm"; + dev_name = "aml_vecm"; + status = "okay"; + gamma_en = <0x0>; + wb_en = <0x0>; + cm_en = <0x0>; + }; + + amvenc_avc { + compatible = "amlogic, amvenc_avc"; + dev_name = "amvenc_avc"; + status = "okay"; + interrupts = <0x0 0x2d 0x1>; + interrupt-names = "mailbox_2"; + }; + + hevc_enc { + compatible = "cnm, HevcEnc"; + dev_name = "HevcEnc"; + status = "okay"; + interrupts = <0x0 0xbb 0x1>; + interrupt-names = "wave420l_irq"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + + io_reg_base { + reg = <0x0 0xc8810000 0x0 0x4000>; + }; + }; + + vpu { + compatible = "amlogic, vpu"; + dev_name = "vpu"; + status = "ok"; + clk_level = <0x7>; + }; + + bt-dev { + compatible = "amlogic, bt-dev"; + dev_name = "bt-dev"; + status = "okay"; + gpio_reset = <0x34 0x60 0x0>; + }; + + rtc { + compatible = "amlogic, aml_vrtc"; + alarm_reg_addr = <0xc81000a8>; + timer_e_addr = <0xc1109988>; + init_date = "2015/01/01"; + status = "okay"; + }; + + wifi { + compatible = "amlogic, aml_wifi"; + dev_name = "aml_wifi"; + status = "okay"; + interrupt_pin = <0x34 0x56 0x0>; + interrupts = <0x0 0x44 0x4>; + irq_trigger_type = "GPIO_IRQ_LOW"; + power_on_pin = <0x34 0x55 0x0>; + dhd_static_buf; + pinctrl-names = "wifi_32k_pins"; + pinctrl-0 = <0x3d>; + pwm_config = <0x3e>; + }; + + wifi_pwm_conf { + pwm_channel1 = <0x4>; + pwm_channel2 = <0xc>; + pwm_channel1_conf = <0x774d 0x3ba6 0x6>; + pwm_channel2_conf = <0x7736 0x3b9b 0x9>; + linux,phandle = <0x3e>; + phandle = <0x3e>; + }; + + emmc { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0074000 0x0 0x2000>; + interrupts = <0x0 0xda 0x1>; + pinctrl-names = "emmc_clk_cmd_pins", "emmc_all_pins"; + pinctrl-0 = <0x3f>; + pinctrl-1 = <0x40 0x41 0x42>; + + emmc { + status = "disabled"; + pinname = "emmc"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_8_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_1_8V_DDR", "MMC_CAP_HW_RESET", "MMC_CAP_ERASE", "MMC_CAP_CMD23"; + caps2 = "MMC_CAP2_HS200", "MMC_CAP2_HS400"; + f_min = <0x493e0>; + f_max = <0x5f5e100>; + max_req_size = <0x20000>; + gpio_dat3 = <0x34 0x1d 0x0>; + hw_reset = <0x34 0x23 0x0>; + card_type = <0x1>; + }; + }; + + sd { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0072000 0x0 0x2000>; + interrupts = <0x0 0xd9 0x1 0x0 0x43 0x1 0x0 0x45 0x1>; + pinctrl-names = "sd_clk_cmd_pins", "sd_all_pins", "sd_1bit_pins", "sd_clk_cmd_uart_pins", "sd_1bit_uart_pins", "sd_to_ao_uart_pins", "ao_to_sd_uart_pins", "ao_to_sd_jtag_pins", "sd_to_ao_jtag_pins"; + pinctrl-0 = <0x43>; + pinctrl-1 = <0x44>; + pinctrl-2 = <0x45>; + pinctrl-3 = <0x46>; + pinctrl-4 = <0x47>; + pinctrl-5 = <0x48>; + pinctrl-6 = <0x49>; + pinctrl-7 = <0x4a>; + pinctrl-8 = <0x4b>; + + sd { + status = "okay"; + pinname = "sd"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_4_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED"; + f_min = <0x61a80>; + f_max = <0x5f5e100>; + max_req_size = <0x20000>; + gpio_dat3 = <0x34 0x2e 0x0>; + jtag_pin = <0x34 0x2a 0x0>; + gpio_cd = <0x34 0x30 0x0>; + card_in_delay = <0x190>; + irq_in = <0x3>; + irq_out = <0x5>; + card_type = <0x5>; + }; + }; + + sdio { + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0070000 0x0 0x2000>; + interrupts = <0x0 0xd8 0x1>; + pinctrl-names = "sdio_clk_cmd_pins", "sdio_all_pins"; + pinctrl-0 = <0x4c>; + pinctrl-1 = <0x4d>; + + sdio { + status = "okay"; + pinname = "sdio"; + ocr_avail = <0x200080>; + caps = "MMC_CAP_4_BIT_DATA", "MMC_CAP_MMC_HIGHSPEED", "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", "MMC_CAP_UHS_SDR12", "MMC_CAP_UHS_SDR25", "MMC_CAP_UHS_SDR50", "MMC_CAP_UHS_SDR104", "MMC_PM_KEEP_POWER"; + f_min = <0x61a80>; + f_max = <0xbebc200>; + max_req_size = <0x20000>; + card_type = <0x3>; + }; + }; + + nand { + compatible = "amlogic, aml_nand"; + dev_name = "nand"; + status = "disabled"; + reg = <0x0 0xd0074800 0x0 0x200>; + interrupts = <0x0 0x22 0x1>; + pinctrl-names = "nand_rb_mod", "nand_norb_mod", "nand_cs_pins_only"; + pinctrl-0 = <0x4e 0x4f 0x50>; + pinctrl-1 = <0x4e 0x4f 0x50>; + pinctrl-2 = <0x51>; + device_id = <0x0>; + plat-names = "nandnormal"; + plat-num = <0x1>; + plat-part-0 = <0x52>; + + normal { + enable_pad = "ce0", "ce1", "ce2", "ce3"; + busy_pad = "rb0"; + linux,phandle = <0x52>; + phandle = <0x52>; + }; + }; + + aml_nftl { + compatible = "amlogic, nftl"; + }; + + unifykey { + compatible = "amlogic, unifykey"; + status = "ok"; + unifykey-num = <0xe>; + unifykey-index-0 = <0x53>; + unifykey-index-1 = <0x54>; + unifykey-index-2 = <0x55>; + unifykey-index-3 = <0x56>; + unifykey-index-4 = <0x57>; + unifykey-index-5 = <0x58>; + unifykey-index-6 = <0x59>; + unifykey-index-7 = <0x5a>; + unifykey-index-8 = <0x5b>; + unifykey-index-9 = <0x5c>; + unifykey-index-10 = <0x5d>; + unifykey-index-11 = <0x5e>; + unifykey-index-12 = <0x5f>; + unifykey-index-13 = <0x60>; + + key_0 { + key-name = "usid"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x53>; + phandle = <0x53>; + }; + + key_1 { + key-name = "mac"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x54>; + phandle = <0x54>; + }; + + key_2 { + key-name = "hdcp"; + key-device = "secure"; + key-type = "sha1"; + key-permit = "read", "write", "del"; + linux,phandle = <0x55>; + phandle = <0x55>; + }; + + key_3 { + key-name = "secure_boot_set"; + key-device = "efuse"; + key-permit = "write"; + linux,phandle = <0x56>; + phandle = <0x56>; + }; + + key_4 { + key-name = "mac_bt"; + key-device = "normal"; + key-permit = "read", "write", "del"; + key-type = "mac"; + linux,phandle = <0x57>; + phandle = <0x57>; + }; + + key_5 { + key-name = "mac_wifi"; + key-device = "normal"; + key-permit = "read", "write", "del"; + key-type = "mac"; + linux,phandle = <0x58>; + phandle = <0x58>; + }; + + key_6 { + key-name = "hdcp2_tx"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x59>; + phandle = <0x59>; + }; + + key_7 { + key-name = "hdcp2_rx"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5a>; + phandle = <0x5a>; + }; + + key_8 { + key-name = "widevinekeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5b>; + phandle = <0x5b>; + }; + + key_9 { + key-name = "deviceid"; + key-device = "normal"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5c>; + phandle = <0x5c>; + }; + + key_10 { + key-name = "hdcp22_fw_private"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5d>; + phandle = <0x5d>; + }; + + key_11 { + key-name = "PlayReadykeybox25"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5e>; + phandle = <0x5e>; + }; + + key_12 { + key-name = "prpubkeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x5f>; + phandle = <0x5f>; + }; + + key_13 { + key-name = "prprivkeybox"; + key-device = "secure"; + key-permit = "read", "write", "del"; + linux,phandle = <0x60>; + phandle = <0x60>; + }; + }; + + amhdmitx { + compatible = "amlogic, amhdmitx"; + dev_name = "amhdmitx"; + status = "okay"; + pinctrl-names = "hdmitx_hpd", "hdmitx_ddc"; + pinctrl-0 = <0x61>; + pinctrl-1 = <0x62>; + interrupts = <0x0 0x39 0x1>; + interrupt-names = "hdmitx_hpd"; + clocks = <0x6 0xb 0x6 0xc 0x6 0xd 0x6 0xe 0x6 0xf 0x6 0x16>; + clock-names = "hdmitx_clk_sys", "hdmitx_clk_encp", "hdmitx_clk_enci", "hdmitx_clk_pixel", "hdmitx_clk_phy", "hdmitx_clk_vid"; + gpio_i2c_en = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + }; + + aocec { + compatible = "amlogic, amlogic-aocec"; + device_name = "aocec"; + status = "okay"; + vendor_name = "Amlogic"; + vendor_id = <0x0>; + product_desc = "GXBB Mbox"; + cec_osd_string = "MBox"; + port_num = <0x1>; + arc_port_mask = <0x0>; + interrupts = <0x0 0xc7 0x1>; + interrupt-names = "hdmi_aocec"; + pinctrl-names = "hdmitx_aocec"; + pinctrl-0 = <0x63>; + reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + }; + + tvout { + compatible = "amlogic, tvout"; + dev_name = "tvout"; + status = "okay"; + }; + + i2c_gpio { + compatible = "i2c-gpio"; + status = "okay"; + dev_name = "i2c-gpio"; + i2c-gpio,delay-us = <0xa>; + gpios = <0x34 0x11 0x0 0x34 0x12 0x0>; + #address-cells = <0x2>; + #size-cells = <0x2>; + i2c-gpio,timeout-ms = <0xa>; + + i2c_gpio_edid { + compatible = "i2c-gpio-edid"; + reg = <0x50 0x0 0x0 0x0>; + }; + }; + + serial@c81004c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004c0 0x0 0x18>; + interrupts = <0x0 0xc1 0x1>; + status = "okay"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + xtal_tick_en = <0x1>; + fifosize = <0x40>; + pinctrl-names = "default"; + support-sysrq = <0x0>; + }; + + serial@c11084c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084c0 0x0 0x18>; + interrupts = <0x0 0x1a 0x1>; + status = "okay"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x80>; + pinctrl-names = "default"; + pinctrl-0 = <0x64>; + resets = <0x6 0xd>; + }; + + serial@c11084dc { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084dc 0x0 0x18>; + interrupts = <0x0 0x4b 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x65>; + resets = <0x6 0x30>; + }; + + serial@c1108700 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc1108700 0x0 0x18>; + interrupts = <0x0 0x5d 0x1>; + status = "disable"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x66>; + resets = <0x6 0x4f>; + }; + + serial@c81004e0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004e0 0x0 0x18>; + interrupts = <0x0 0xc5 0x1>; + status = "okay"; + clocks = <0x6 0x2>; + clock-names = "clk_uart"; + fifosize = <0x40>; + pinctrl-names = "default"; + pinctrl-0 = <0x67>; + }; + + canvas { + compatible = "amlogic, meson, canvas"; + dev_name = "amlogic-canvas"; + status = "ok"; + reg = <0x0 0xc8838000 0x0 0x400>; + }; + + rdma { + compatible = "amlogic, meson, rdma"; + dev_name = "amlogic-rdma"; + status = "ok"; + interrupts = <0x0 0x59 0x1>; + interrupt-names = "rdma"; + }; + + dwc3@c9000000 { + compatible = "synopsys, dwc3"; + reg = <0x0 0xc9000000 0x0 0x100000>; + interrupts = <0x0 0x1e 0x4>; + usb-phy = <0x68 0x69>; + cpu-type = "gxl"; + clock-src = "usb3.0"; + }; + + usb2phy@d0078000 { + compatible = "amlogic, amlogic-new-usb2"; + portnum = <0x3>; + reg = <0x0 0xd0078000 0x0 0x80>; + linux,phandle = <0x68>; + phandle = <0x68>; + }; + + usb3phy@d0078080 { + compatible = "amlogic, amlogic-new-usb3"; + portnum = <0x0>; + reg = <0x0 0xd0078080 0x0 0x20>; + interrupts = <0x0 0x10 0x4>; + otg = <0x1>; + gpio-vbus-power = "GPIOAO_5"; + gpios = <0x33 0x5 0x0>; + linux,phandle = <0x69>; + phandle = <0x69>; + }; + + dwc2_a { + compatible = "amlogic,dwc2"; + device_name = "dwc2_a"; + reg = <0x0 0xc9100000 0x0 0x40000>; + status = "okay"; + interrupts = <0x0 0x1f 0x4>; + pl-periph-id = <0x0>; + clock-src = "usb0"; + port-id = <0x0>; + port-type = <0x2>; + port-speed = <0x0>; + port-config = <0x0>; + port-dma = <0x0>; + port-id-mode = <0x0>; + usb-fifo = <0x2d8>; + cpu-type = "gxl"; + controller-type = <0x2>; + phy-reg = <0xd0078000>; + phy-reg-size = <0xa0>; + resets = <0x6 0x3a 0x6 0x48 0x6 0x36>; + reset-names = "usb_general", "usb1", "usb1_to_ddr"; + }; + + I2S { + #sound-dai-cells = <0x0>; + resets = <0x6 0x26 0x6 0x12 0x6 0x28 0x6 0x29 0x6 0x2a 0x6 0x2b 0x6 0x2c 0x6 0x2d 0x6 0x2f 0x6 0x8e 0x6 0x22>; + reset-names = "top_glue", "aud_buf", "i2s_out", "amclk_measure", "aififo2", "aud_mixer", "mixer_reg", "adc", "top_level", "aoclk", "aud_in"; + clocks = <0x6 0x21 0x6 0x22>; + clock-names = "mpll2", "mclk"; + compatible = "amlogic, aml-i2s-dai"; + linux,phandle = <0x75>; + phandle = <0x75>; + }; + + SPDIF { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-spdif-dai"; + resets = <0x6 0x27 0x6 0x90>; + reset-names = "iec958", "iec958_amclk"; + clocks = <0x6 0x20 0x6 0x24 0x6 0x22 0x6 0x25 0x6 0xa>; + clock-names = "mpll1", "i958", "mclk", "spdif", "clk_81"; + linux,phandle = <0x76>; + phandle = <0x76>; + }; + + PCM { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-pcm-dai"; + pinctrl-names = "aml_audio_btpcm"; + pinctrl-0 = <0x6a>; + clocks = <0x6 0x1f 0x6 0x2a 0x6 0x2b>; + clock-names = "mpll0", "pcm_mclk", "pcm_sclk"; + pcm_mode = <0x1>; + linux,phandle = <0x77>; + phandle = <0x77>; + }; + + i2s_platform { + compatible = "amlogic, aml-i2s"; + interrupts = <0x0 0x1d 0x1>; + linux,phandle = <0x73>; + phandle = <0x73>; + }; + + pcm_platform { + compatible = "amlogic, aml-pcm"; + linux,phandle = <0x74>; + phandle = <0x74>; + }; + + spdif_codec { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml-spdif-codec"; + pinctrl-names = "aml_audio_spdif"; + pinctrl-0 = <0x6b>; + linux,phandle = <0x79>; + phandle = <0x79>; + }; + + pcm_codec { + #sound-dai-cells = <0x0>; + compatible = "amlogic, pcm2BT-codec"; + linux,phandle = <0x7a>; + phandle = <0x7a>; + }; + + dummy { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml_dummy_codec"; + status = "disable"; + }; + + t9015 { + #sound-dai-cells = <0x0>; + compatible = "amlogic, aml_codec_T9015"; + reg = <0x0 0xc8832000 0x0 0x14>; + status = "okay"; + linux,phandle = <0x78>; + phandle = <0x78>; + }; + + aml_m8_snd { + compatible = "aml, aml_snd_m8"; + status = "okay"; + aml-sound-card,format = "i2s"; + aml_sound_card,name = "AML-M8AUDIO"; + aml,audio-routing = "Ext Spk", "LOUTL", "Ext Spk", "LOUTR"; + mute_inv; + hp_disable; + hp_paraments = <0x320 0x12c 0x0 0x5 0x1>; + pinctrl-names = "aml_snd_m8"; + pinctrl-0 = <0x6c>; + cpu_list = <0x6d 0x6e 0x6f>; + codec_list = <0x70 0x71 0x72>; + plat_list = <0x73 0x73 0x74>; + + cpudai0 { + sound-dai = <0x75>; + linux,phandle = <0x6d>; + phandle = <0x6d>; + }; + + cpudai1 { + sound-dai = <0x76>; + linux,phandle = <0x6e>; + phandle = <0x6e>; + }; + + cpudai2 { + sound-dai = <0x77>; + linux,phandle = <0x6f>; + phandle = <0x6f>; + }; + + codec0 { + sound-dai = <0x78>; + linux,phandle = <0x70>; + phandle = <0x70>; + }; + + codec1 { + sound-dai = <0x79>; + linux,phandle = <0x71>; + phandle = <0x71>; + }; + + codec2 { + sound-dai = <0x7a>; + linux,phandle = <0x72>; + phandle = <0x72>; + }; + }; + + gpio_keypad { + compatible = "amlogic, gpio_keypad"; + status = "okay"; + scan_period = <0x14>; + key_num = <0x1>; + key_name = "power"; + key_code = <0x74>; + key_pin = <0x33 0x2 0x0>; + irq_keyup = <0x6>; + irq_keydown = <0x7>; + }; + + adc_keypad { + compatible = "amlogic, adc_keypad"; + status = "okay"; + key_name = "home"; + key_num = <0x1>; + key_code = <0x66>; + key_chan = <0x0>; + key_val = <0xa>; + key_tolerance = <0x28>; + }; + + aml-sensor@0 { + compatible = "amlogic, aml-thermal"; + device_name = "thermal"; + #thermal-sensor-cells = <0x1>; + linux,phandle = <0x7b>; + phandle = <0x7b>; + + cooling_devices { + + cpufreq_cool_cluster0 { + min_state = <0xf4240>; + dyn_coeff = <0x8c>; + cluster_id = <0x0>; + node_name = "cluster0"; + device_type = "cpufreq"; + }; + + cpufreq_cool_cluster1 { + min_state = <0x7a120>; + dyn_coeff = <0x8c>; + cluster_id = <0x1>; + node_name = "cluster1"; + device_type = "cpufreq"; + }; + + cpucore_cool_cluster0 { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x0>; + node_name = "cpu_core_cluster0"; + device_type = "cpucore"; + }; + + cpucore_cool_cluster1 { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x1>; + node_name = "cpu_core_cluster1"; + device_type = "cpucore"; + }; + + gpufreq_cool { + min_state = <0x190>; + dyn_coeff = <0x1b5>; + cluster_id = <0x0>; + node_name = "t82x"; + device_type = "gpufreq"; + }; + + gpucore_cool { + min_state = <0x1>; + dyn_coeff = <0x0>; + cluster_id = <0x0>; + node_name = "thermal_gpu_cores"; + device_type = "gpucore"; + }; + }; + + cpu_core_cluster0 { + #cooling-cells = <0x2>; + linux,phandle = <0x7f>; + phandle = <0x7f>; + }; + + cpu_core_cluster1 { + #cooling-cells = <0x2>; + linux,phandle = <0x80>; + phandle = <0x80>; + }; + + thermal_gpu_cores { + #cooling-cells = <0x2>; + linux,phandle = <0x82>; + phandle = <0x82>; + }; + }; + + thermal-zones { + + soc_thermal { + polling-delay = <0x3e8>; + polling-delay-passive = <0x64>; + sustainable-power = <0x992>; + thermal-sensors = <0x7b 0x3>; + + trips { + + trip-point@0 { + temperature = <0x11170>; + hysteresis = <0x3e8>; + type = "passive"; + }; + + trip-point@1 { + temperature = <0x13880>; + hysteresis = <0x3e8>; + type = "passive"; + linux,phandle = <0x7c>; + phandle = <0x7c>; + }; + + trip-point@2 { + temperature = <0x14c08>; + hysteresis = <0x1388>; + type = "hot"; + }; + + trip-point@3 { + temperature = <0x3f7a0>; + hysteresis = <0x3e8>; + type = "critical"; + }; + }; + + cooling-maps { + + cpufreq_cooling_map0 { + trip = <0x7c>; + cooling-device = <0x7d 0x0 0x4>; + contribution = <0x400>; + }; + + cpufreq_cooling_map1 { + trip = <0x7c>; + cooling-device = <0x7e 0x0 0x4>; + contribution = <0x400>; + }; + + cpucore_cooling_map0 { + trip = <0x7c>; + cooling-device = <0x7f 0x0 0x3>; + contribution = <0x400>; + }; + + cpucore_cooling_map1 { + trip = <0x7c>; + cooling-device = <0x80 0x0 0x3>; + contribution = <0x400>; + }; + + gpufreq_cooling_map { + trip = <0x7c>; + cooling-device = <0x81 0x0 0x4>; + contribution = <0x400>; + }; + + gpucore_cooling_map { + trip = <0x7c>; + cooling-device = <0x82 0x0 0x2>; + contribution = <0x400>; + }; + }; + }; + }; +}; diff --git a/arch/arm64/boot/dts/kvim_multios.dts b/arch/arm64/boot/dts/kvim_multios.dts new file mode 100644 index 0000000000000..ee5a94d677991 --- /dev/null +++ b/arch/arm64/boot/dts/kvim_multios.dts @@ -0,0 +1,1090 @@ +/* + * arch/arm64/boot/dts/amlogic/kvim.dts + * + * Copyright (C) 2015 Amlogic, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * +*/ + +/dts-v1/; + +#include +#include +#include +#include +#include +#include "mesongxl.dtsi" +#include "partitions-multios.dtsi" +/ { + model = "Amlogic"; + amlogic-dt-id = "kvim"; + compatible = "amlogic, Gxbb"; + interrupt-parent = <&gic>; + #address-cells = <2>; + #size-cells = <2>; + + aliases { + serial0 = &uart_AO; + serial1 = &uart_A; + serial2 = &uart_B; + serial3 = &uart_C; + serial4 = &uart_AO_B; + }; + + memory@00000000 { + device_type = "memory"; + linux,usable-memory = <0x0 0x100000 0x0 0x7ff00000>; + }; + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + /* global autoconfigured region for contiguous allocations */ + secmon_reserved:linux,secmon { + compatible = "amlogic, aml_secmon_memory"; + reg = <0x0 0x10000000 0x0 0x200000>; + no-map; + }; + secos_reserved:linux,secos { + status = "disable"; + compatible = "amlogic, aml_secos_memory"; + reg = <0x0 0x05300000 0x0 0x2000000>; + no-map; + }; + pstore:aml_pstore { + compatible = "amlogic, pstore"; + reg = <0x0 0x07300000 0x0 0x100000>; + no-map; + }; + fb_reserved:linux,meson-fb { + compatible = "amlogic, fb-memory"; + size = <0x0 0x2000000>; + no-map; + }; + + di_reserved:linux,di { + compatible = "amlogic, di-mem"; + size = <0x0 0x1e00000>; //10x1920x1088x3/2=30M + //no-map; + }; + + ion_reserved:linux,ion-dev { + compatible = "amlogic, idev-mem"; + size = <0x0 0x3000000>; + }; + + /* vdin0 */ +// vdin0_reserved:linux,vdin0 { +// compatible = "amlogic, vdin_memory"; + /* 1920x1080x2x4 =17M */ +// size = <0x0 0x01000000>; +// }; + /* vdin1 */ +// vdin1_reserved:linux,vdin1 { +// compatible = "amlogic, vdin_memory"; + /* 1920x1080x2x4 =17M */ +// size = <0x0 0x01000000>; +// }; + /* POST PROCESS MANAGER */ + ppmgr_reserved:linux,ppmgr { + compatible = "shared-dma-pool"; + size = <0x0 0x0>; + }; + + codec_mm_cma:linux,codec_mm_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0xc000000>; + alignment = <0x0 0x400000>; + linux,contiguous-region; + }; + picdec_cma_reserved:linux,picdec { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x0>; + alignment = <0x0 0x0>; + linux,contiguous-region; + }; + /* codec shared reserved */ + codec_mm_reserved:linux,codec_mm_reserved { + compatible = "amlogic, codec-mm-reserved"; + size = <0x0 0x4100000>; + alignment = <0x0 0x100000>; + //no-map; + }; + /*vm_reserved:linux,vm { + compatible = "amlogic, vm_memory"; + size = <0x0 0x2000000>; + };*/ + + }; + + sysled { + compatible = "amlogic, sysled"; + dev_name = "sysled"; + status = "okay"; + led_gpio = <&gpio_ao GPIOAO_9 GPIO_ACTIVE_HIGH>; + led_active_low = <1>; + }; + + meson-vout { + compatible = "amlogic, meson-vout"; + dev_name = "meson-vout"; + status = "okay"; + }; + meson-fb { + compatible = "amlogic, meson-fb"; + memory-region = <&fb_reserved>; + dev_name = "meson-fb"; + status = "okay"; + interrupts = <0 3 1 + 0 89 1>; + interrupt-names = "viu-vsync", "rdma"; + mem_size = <0x01800000 0x00100000>; /* fb0/fb1 memory size */ + display_mode_default = "1080p60hz"; + scale_mode = <1>; /** 0:VPU free scale 1:OSD free scale 2:OSD super scale */ + display_size_default = <1920 1080 1920 3240 32>; //1920*1080*4*3 = 0x17BB000 + }; + ge2d { + compatible = "amlogic, ge2d"; + dev_name = "ge2d"; + status = "okay"; + interrupts = <0 150 1>; + interrupt-names = "ge2d"; + clocks = <&clock CLK_VAPB_0>, + <&clock CLK_GE2D>; + clock-names = "clk_vapb_0", + "clk_ge2d"; + resets = <&clock GCLK_IDX_GE2D>; + reset-names = "ge2d"; + }; + codec_io { + compatible = "amlogic, codec_io"; + #address-cells=<2>; + #size-cells=<2>; + ranges; + io_cbus_base{ + reg = <0x0 0xC1100000 0x0 0x100000>; + }; + io_dos_base{ + reg = <0x0 0xc8820000 0x0 0x10000>; + }; + io_hiubus_base{ + reg = <0x0 0xc883c000 0x0 0x2000>; + }; + io_aobus_base{ + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + io_vcbus_base{ + reg = <0x0 0xd0100000 0x0 0x40000>; + }; + io_dmc_base{ + reg = <0x0 0xc8838000 0x0 0x400>; + }; + }; + codec_mm { + compatible = "amlogic, codec, mm"; + memory-region = <&codec_mm_cma &codec_mm_reserved>; + dev_name = "codec_mm"; + status = "okay"; + }; + ethmac: ethernet@0xc9410000 { + compatible = "amlogic, gxbb-rmii-dwmac"; + reg = <0x0 0xc9410000 0x0 0x10000 + 0x0 0xc8834540 0x0 0x8 + 0x0 0xc8834558 0x0 0xc>; + interrupts = <0 8 1>; + phy-mode= "rmii"; + mc_val = <0x1800>; + resets = <&clock GCLK_IDX_ETHERNET>; + reset-names = "ethpower"; + interrupt-names = "macirq"; + clocks = <&clock CLK_81>; + clock-names = "ethclk81"; + internal_phy=<1>; + }; + mesonstream { + compatible = "amlogic, codec, streambuf"; + dev_name = "mesonstream"; + status = "okay"; + resets = <&clock GCLK_IDX_HIU_PARSER_TOP + &clock GCLK_IDX_VPU_INTR + &clock GCLK_IDX_DEMUX + &clock GCLK_IDX_DOS>; + reset-names = "parser_top", + "vpu_intr", + "demux", + "vdec"; + }; + + amvideocap { + compatible = "amlogic, amvideocap"; + dev_name = "amvideocap.0"; + status = "okay"; + max_size = <8>;//8M + }; + + ion_dev { + compatible = "amlogic, ion_dev"; + memory-region = <&ion_reserved>; + }; + + vdec { + compatible = "amlogic, vdec"; + dev_name = "vdec.0"; + status = "okay"; + interrupts = <0 3 1 + 0 23 1 + 0 32 1 + 0 43 1 + 0 44 1 + 0 45 1>; + interrupt-names = "vsync", + "demux", + "parser", + "mailbox_0", + "mailbox_1", + "mailbox_2"; + }; + picdec { + compatible = "amlogic, picdec"; + memory-region = <&picdec_cma_reserved>; + dev_name = "picdec"; + status = "okay"; + }; + ppmgr { + compatible = "amlogic, ppmgr";//to match of_device_id's compatible member + memory-region = <&ppmgr_reserved>; + dev_name = "ppmgr"; + status = "okay"; + }; + deinterlace { + compatible = "amlogic, deinterlace"; + status = "okay"; + memory-region = <&di_reserved>; + interrupts = <0 46 1 + 0 6 1>; + interrupt-names = "de_irq", + "timerc"; + buffer-size = <3133440>; //1920x1088x3/2 + hw-version = <2>; + }; +/* vdin0 { + compatible = "amlogic, vdin"; + memory-region = <&vdin0_reserved>; + dev_name = "vdin0"; + status = "ok"; + reserve-iomap = "true"; + interrupts = <0 83 1>; + rdma-irq = <2>; + clocks = <&clock CLK_XTAL>, + <&clock CLK_VID_LOCK_CLK>; + clock-names = "xtal", "cts_vid_lock_clk"; + vdin_id = <0>; + }; + vdin { + compatible = "amlogic, vdin"; + memory-region = <&vdin1_reserved>; + dev_name = "vdin1"; + status = "ok"; + reserve-iomap = "true"; + interrupts = <0 85 1>; + rdma-irq = <4>; + clocks = <&clock CLK_XTAL>, + <&clock CLK_VID_LOCK_CLK>; + clock-names = "xtal", "cts_vid_lock_clk"; + vdin_id = <1>; + };*/ + amvdec_656in0 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in0"; + status = "ok"; + reg = <0x0 0xd0048000 0x0 0x7c>; + clocks = <&clock CLK_FPLL_DIV2>, + <&clock CLK_BT656_CLK0>; + clock-names = "fclk_div2", "cts_bt656_clk0"; + bt656_id = <0>; + }; + amvdec_656in1 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in1"; + status = "ok"; + reg = <0x0 0xd0050000 0x0 0x7c>; + clocks = <&clock CLK_FPLL_DIV2>, + <&clock CLK_BT656_CLK1>; + clock-names = "fclk_div2", "cts_bt656_clk1"; + bt656_id = <1>; + }; + amlvecm { + compatible = "amlogic, vecm"; + dev_name = "aml_vecm"; + status = "okay"; + gamma_en = <0>;/*1:enabel ;0:disable*/ + wb_en = <0>;/*1:enabel ;0:disable*/ + cm_en = <0>;/*1:enabel ;0:disable*/ + }; + amvenc_avc{ + compatible = "amlogic, amvenc_avc"; + //memory-region = <&amvenc_avc_reserved>; + //memory-region = <&avc_cma_reserved>; + dev_name = "amvenc_avc"; + status = "okay"; + interrupts = <0 45 1>; + interrupt-names = "mailbox_2"; + }; + + + /*vm { + compatible = "amlogic, vm"; + memory-region = <&vm_reserved>; + dev_name = "vm"; + status = "okay"; + };*/ + + vpu { + compatible = "amlogic, vpu"; + dev_name = "vpu"; + status = "ok"; + clk_level = <7>; + /** 0: 100.0M 1: 166.7M 2: 200.0M + 3: 250.0M 4: 333.3M 5: 400.0M + 6: 500.0M 7: 666.7M */ + }; + //if use bt, open it + bt-dev{ + compatible = "amlogic, bt-dev"; + dev_name = "bt-dev"; + status = "okay"; + gpio_reset = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>; + }; + + rtc{ + compatible = "amlogic, aml_vrtc"; + alarm_reg_addr = <0xc81000a8>; + timer_e_addr = <0xc1109988>; + init_date = "2015/01/01"; + status = "okay"; + }; + + wifi{ + compatible = "amlogic, aml_wifi"; + dev_name = "aml_wifi"; + status = "okay"; + interrupt_pin = <&gpio GPIOX_7 GPIO_ACTIVE_HIGH>; + interrupts = < 0 68 4>; + irq_trigger_type = "GPIO_IRQ_LOW"; + power_on_pin = <&gpio GPIOX_6 GPIO_ACTIVE_HIGH>; + dhd_static_buf; //if use bcm wifi, config dhd_static_buf and 32k as bellow + pinctrl-names = "wifi_32k_pins"; + pinctrl-0 = <&wifi_32k_pins>; + }; + sd{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0072000 0x0 0x2000>; + interrupts = < 0 217 1 + 0 67 1 + 0 69 1>; + pinctrl-names = "sd_clk_cmd_pins", "sd_all_pins", "sd_1bit_pins","sd_clk_cmd_uart_pins","sd_1bit_uart_pins", "sd_to_ao_uart_pins", "ao_to_sd_uart_pins","ao_to_sd_jtag_pins","sd_to_ao_jtag_pins"; + pinctrl-0 = <&sd_clk_cmd_pins>; + pinctrl-1 = <&sd_all_pins>; + pinctrl-2 = <&sd_1bit_pins>; + pinctrl-3 = <&sd_clk_cmd_uart_pins>; + pinctrl-4 = <&sd_1bit_uart_pins>; + pinctrl-5 = <&sd_to_ao_uart_pins>; + pinctrl-6 = <&ao_to_sd_uart_pins>; + pinctrl-7 = <&ao_to_sd_jtag_pins>; + pinctrl-8 = <&sd_to_ao_jtag_pins>; + sd{ + status = "okay"; + pinname = "sd"; + ocr_avail = <0x00200080>; // 3.3:0x200000, 1.8+3.3:0x00200080 + caps = "MMC_CAP_4_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED"; + //"MMC_CAP_UHS_SDR12", + //"MMC_CAP_UHS_SDR25","MMC_CAP_UHS_SDR50", + //"MMC_CAP_UHS_SDR104"; + f_min = <400000>; + f_max = <100000000>; + max_req_size = <0x20000>; /**128KB*/ + gpio_dat3 = <&gpio CARD_4 GPIO_ACTIVE_HIGH>; + jtag_pin = <&gpio CARD_0 GPIO_ACTIVE_HIGH>; + gpio_cd = <&gpio CARD_6 GPIO_ACTIVE_HIGH>; + irq_in = <3>; + irq_out = <5>; + card_type = <5>; /* 0:unknown, 1:mmc card(include eMMC), 2:sd card(include tSD), 3:sdio device(ie:sdio-wifi), 4:SD combo (IO+mem) card, 5:NON sdio device(means sd/mmc card), other:reserved */ + }; + }; + emmc{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0074000 0x0 0x2000>; + interrupts = < 0 218 1>; + pinctrl-names = "emmc_clk_cmd_pins", "emmc_all_pins"; + pinctrl-0 = <&emmc_clk_cmd_pins>; + pinctrl-1 = <&emmc_conf_pull_up &emmc_conf_pull_done &emmc_all_pins>; + emmc{ + status = "disabled"; + pinname = "emmc"; + ocr_avail = <0x200080>; /**VDD voltage 3.3 ~ 3.4 */ + caps = "MMC_CAP_8_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE","MMC_CAP_1_8V_DDR", + "MMC_CAP_HW_RESET", "MMC_CAP_ERASE", "MMC_CAP_CMD23"; + caps2 = "MMC_CAP2_HS200", "MMC_CAP2_HS400"; + f_min = <300000>; + f_max = <100000000>; + max_req_size = <0x20000>; /**256KB*/ + gpio_dat3 = <&gpio BOOT_3 GPIO_ACTIVE_HIGH>; + hw_reset = <&gpio BOOT_9 GPIO_ACTIVE_HIGH>; + card_type = <1>; /* 1:mmc card(include eMMC), 2:sd card(include tSD), */ + }; + }; + sdio{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0070000 0x0 0x2000>; + interrupts = < 0 216 4>; + pinctrl-names = "sdio_clk_cmd_pins", "sdio_all_pins"; + pinctrl-0 = <&sdio_clk_cmd_pins>; + pinctrl-1 = <&sdio_all_pins>; + sdio{ + status = "okay"; + pinname = "sdio"; + ocr_avail = <0x00200080>; /*3.3:0x200000, 1.8+3.3:0x00200080 */ + caps = "MMC_CAP_4_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", + "MMC_CAP_UHS_SDR12","MMC_CAP_UHS_SDR25", + "MMC_CAP_UHS_SDR50","MMC_CAP_UHS_SDR104", + "MMC_PM_KEEP_POWER","MMC_CAP_SDIO_IRQ"; + f_min = <400000>; + f_max = <200000000>; + max_req_size = <0x20000>; /**128KB*/ + card_type = <3>; /*3:sdio device(ie:sdio-wifi), 4:SD combo (IO+mem) card, */ + }; + }; + nand{ + compatible = "amlogic, aml_nand"; + dev_name = "nand"; + status = "disabled"; + reg = <0x0 0xd0074800 0x0 0x200>; + interrupts = < 0 34 1 >; + pinctrl-names = "nand_rb_mod","nand_norb_mod", "nand_cs_pins_only"; + pinctrl-0 = <&conf_nand_pulldown &conf_nand_pullup &all_nand_pins>; + pinctrl-1 = <&conf_nand_pulldown &conf_nand_pullup &all_nand_pins>; + pinctrl-2 = <&nand_cs_pins>; + device_id = <0>; + plat-names = "nandnormal"; + plat-num = <1>; + plat-part-0 = <&normal>; + normal: normal{ + enable_pad ="ce0","ce1","ce2","ce3"; + busy_pad = "rb0"; + }; + }; + aml_nftl{ + compatible = "amlogic, nftl"; + /* config nftl here */ + + }; + /*aml_cams{ + compatible = "amlogic, cams_prober"; + status = "okay"; + clocks = <&clock CLK_CAMERA_24M>; + clock-names = "clk_camera_24"; + pinctrl-names = "gpio"; + pinctrl-0 = <&aml_cam_gpio_pins> ; + cam_0{ + cam_name = "sp2518"; + front_back = <0>; + i2c_bus = "i2c_bus_a"; + gpio_pwdn-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_HIGH>; + gpio_rst-gpios = <&gpio GPIOZ_12 GPIO_ACTIVE_HIGH>; + mirror_flip = <1>; + vertical_flip = <1>; + spread_spectrum = <0>; //0:none; 1:0.3%; 2:0.6%; 3:1.25%; 4:2.5%; 5:5% + bt_path = "gpio"; + status = "okay"; + }; + };*/ + + unifykey{ + compatible = "amlogic, unifykey"; + status = "ok"; + + unifykey-num = <14>; + unifykey-index-0 = <&keysn_0>; + unifykey-index-1 = <&keysn_1>; + unifykey-index-2 = <&keysn_2>; + unifykey-index-3 = <&keysn_3>; + unifykey-index-4 = <&keysn_4>; + unifykey-index-5 = <&keysn_5>; + unifykey-index-6 = <&keysn_6>; + unifykey-index-7 = <&keysn_7>; + unifykey-index-8 = <&keysn_8>; + unifykey-index-9 = <&keysn_9>; + unifykey-index-10= <&keysn_10>; + unifykey-index-11= <&keysn_11>; + unifykey-index-12= <&keysn_12>; + unifykey-index-13= <&keysn_13>; + + keysn_0: key_0{ + key-name = "usid"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_1:key_1{ + key-name = "mac"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_2:key_2{ + key-name = "hdcp"; + key-device = "secure"; + key-type = "sha1"; + key-permit = "read","write","del"; + }; + keysn_3:key_3{ + key-name = "secure_boot_set"; + key-device = "efuse"; + key-permit = "write"; + }; + keysn_4:key_4{ + key-name = "mac_bt"; + key-device = "normal"; + key-permit = "read","write","del"; + key-type = "mac"; + }; + keysn_5:key_5{ + key-name = "mac_wifi"; + key-device = "normal"; + key-permit = "read","write","del"; + key-type = "mac"; + }; + keysn_6:key_6{ + key-name = "hdcp2_tx"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_7:key_7{ + key-name = "hdcp2_rx"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_8:key_8{ + key-name = "widevinekeybox"; + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_9:key_9{ + key-name = "deviceid"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_10:key_10{ + key-name = "hdcp22_fw_private"; + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_11:key_11{ + key-name = "PlayReadykeybox25"; + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_12:key_12{ + key-name = "prpubkeybox";// PlayReady + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_13:key_13{ + key-name = "prprivkeybox";// PlayReady + key-device = "secure"; + key-permit = "read","write","del"; + }; + };//End unifykey + amhdmitx: amhdmitx{ + compatible = "amlogic, amhdmitx"; + dev_name = "amhdmitx"; + status = "okay"; + pinctrl-names="hdmitx_hpd", "hdmitx_ddc"; + pinctrl-0=<&hdmitx_hpd>; + pinctrl-1=<&hdmitx_ddc>; + /* HPD, 57 + 32 = 89; CEC, 151 + 32 = 183*/ + interrupts = <0 57 1>; + interrupt-names = "hdmitx_hpd"; + clocks = <&clock CLK_HDMITX_SYS &clock CLK_HDMITX_ENCP + &clock CLK_HDMITX_ENCI &clock CLK_HDMITX_PIXEL + &clock CLK_HDMITX_PHY &clock CLK_VID>; + clock-names = "hdmitx_clk_sys", "hdmitx_clk_encp", "hdmitx_clk_enci", + "hdmitx_clk_pixel", "hdmitx_clk_phy", "hdmitx_clk_vid"; + gpio_i2c_en = <0x1>; + #address-cells = <2>; + #size-cells = <2>; + ranges; + }; + + aocec: aocec{ + compatible = "amlogic, amlogic-aocec"; + device_name = "aocec"; + status = "okay"; + vendor_name = "Amlogic"; /* Max Chars: 8 */ + vendor_id = <0x000000>; /* Refer to http://standards.ieee.org/develop/regauth/oui/oui.txt */ + product_desc = "GXBB Mbox"; /* Max Chars: 16 */ + cec_osd_string = "MBox"; /* Max Chars: 14 */ + port_num = <1>; + arc_port_mask = <0x0>; + interrupts = <0 199 1>; + interrupt-names = "hdmi_aocec"; + pinctrl-names = "hdmitx_aocec"; + pinctrl-0=<&hdmitx_aocec>; + reg = <0x0 0xc810023c 0x0 0x4 + 0x0 0xc8100000 0x0 0x200>; + }; + + tvout { + compatible = "amlogic, tvout"; + dev_name = "tvout"; + status = "okay"; + }; + + i2c_gpio: i2c_gpio { + compatible = "i2c-gpio"; + status = "okay"; + dev_name = "i2c-gpio"; + i2c-gpio,delay-us = <10>; /* 50 kHz */ + gpios = <&gpio GPIOH_1 0 + &gpio GPIOH_2 0>; + #address-cells = <2>; + #size-cells = <2>; + i2c-gpio,timeout-ms = <10>; + i2c_gpio_edid: i2c_gpio_edid { + compatible = "i2c-gpio-edid"; + reg = <0x50 0x0 0x0 0x0>; + }; + }; + + uart_AO: serial@c81004c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004c0 0x0 0x18>; + interrupts = <0 193 1>; + status = "okay"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + xtal_tick_en = <1>; + fifosize = < 64 >; + pinctrl-names = "default"; + //pinctrl-0 = <&ao_uart_pins>; + support-sysrq = <0>; /* 0 not support , 1 support */ + }; + uart_A: serial@c11084c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084c0 0x0 0x18>; + interrupts = <0 26 1>; + status = "okay"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 128 >; + pinctrl-names = "default"; + pinctrl-0 = <&a_uart_pins>; + resets = <&clock GCLK_IDX_UART0>; + }; + uart_B: serial@c11084dc { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084dc 0x0 0x18>; + interrupts = <0 75 1>; + status = "disable"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 64 >; + pinctrl-names = "default"; + pinctrl-0 = <&b_uart_pins>; + resets = <&clock GCLK_IDX_UART1>; + }; + uart_C: serial@c1108700 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc1108700 0x0 0x18>; + interrupts = <0 93 1>; + status = "disable"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 64 >; + pinctrl-names = "default"; + pinctrl-0 = <&c_uart_pins>; + resets = <&clock GCLK_IDX_UART2>; + }; + uart_AO_B: serial@c81004e0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004e0 0x0 0x18>; + interrupts = <0 197 1>; + status = "disable"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 64 >; + pinctrl-names = "default"; + pinctrl-0 = <&ao_b_uart_pins>; + }; + + + canvas{ + compatible = "amlogic, meson, canvas"; + dev_name = "amlogic-canvas"; + status = "ok"; + reg = <0x0 0xc8838000 0x0 0x400>; + }; + + rdma{ + compatible = "amlogic, meson, rdma"; + dev_name = "amlogic-rdma"; + status = "ok"; + interrupts = <0 89 1>; + interrupt-names = "rdma"; + }; + + dwc3: dwc3@c9000000 { + compatible = "synopsys, dwc3"; + reg = <0x0 0xc9000000 0x0 0x100000>; + interrupts = <0 30 4>; + usb-phy = <&usb2_phy>, <&usb3_phy>; + cpu-type = "gxl"; + clock-src = "usb3.0"; + }; + + usb2_phy: usb2phy@d0078000 { + compatible = "amlogic, amlogic-new-usb2"; + portnum = <2>; + reg = <0x0 0xd0078000 0x0 0x80>; + }; + + usb3_phy: usb3phy@d0078080 { + compatible = "amlogic, amlogic-new-usb3"; + portnum = <0>; + reg = <0x0 0xd0078080 0x0 0x20>; + }; + + dwc2_a { + compatible = "amlogic,dwc2"; + device_name = "dwc2_a"; + reg = <0x0 0xc9100000 0x0 0x40000>; + status = "okay"; + interrupts = <0 31 4>; + pl-periph-id = <0>; /** lm name */ + clock-src = "usb0"; /** clock src */ + port-id = <0>; /** ref to mach/usb.h */ + port-type = <2>; /** 0: otg, 1: host, 2: slave */ + port-speed = <0>; /** 0: default, high, 1: full */ + port-config = <0>; /** 0: default */ + port-dma = <0>; /** 0: default, 1: single, 2: incr, 3: incr4, 4: incr8, 5: incr16, 6: disable*/ + port-id-mode = <0>; /** 0: hardware, 1: sw_host, 2: sw_slave*/ + usb-fifo = <728>; + cpu-type = "gxl"; + controller-type = <2>; /** 0: normal, 1: otg+dwc3 host only, 2: otg+dwc3 device only*/ + phy-reg = <0xd0078000>; + phy-reg-size = <0xa0>; + resets = <&clock GCLK_IDX_USB_GENERAL + &clock GCLK_IDX_MISC_USB1_TO_DDR + &clock GCLK_IDX_USB1>; + reset-names = "usb_general", + "usb1", + "usb1_to_ddr"; + }; + + + /* AUDIO MESON8 DEVICES */ + i2s_dai: I2S { + #sound-dai-cells = <0>; + resets = < + &clock GCLK_IDX_AIU_AI_TOP_GLUE + &clock GCLK_IDX_AUD_BUF_ABD + &clock GCLK_IDX_AIU_I2S_OUT + &clock GCLK_IDX_AIU_AMCLK_MEASURE + &clock GCLK_IDX_AIU_AIFIFO2 + &clock GCLK_IDX_AIU_AUD_MIXER + &clock GCLK_IDX_AIU_MIXER_REG + &clock GCLK_IDX_AIU_ADC + &clock GCLK_IDX_AIU_TOP_LEVEL + &clock GCLK_IDX_AIU_AOCLK + &clock GCLK_IDX_AUD_IN + >; + reset-names = + "top_glue", + "aud_buf", + "i2s_out", + "amclk_measure", + "aififo2", + "aud_mixer", + "mixer_reg", + "adc", + "top_level", + "aoclk", + "aud_in"; + clocks = <&clock CLK_MPLL2>, + <&clock CLK_AMCLK>; + clock-names = "mpll2", "mclk"; + compatible = "amlogic, aml-i2s-dai"; + }; + spdif_dai: SPDIF { + #sound-dai-cells = <0>; + compatible = "amlogic, aml-spdif-dai"; + resets = < + &clock GCLK_IDX_AIU_IEC958 + &clock GCLK_IDX_AIU_ICE958_AMCLK + >; + reset-names = + "iec958", + "iec958_amclk"; + clocks = <&clock CLK_MPLL1>, + <&clock CLK_I958>, + <&clock CLK_AMCLK>, + <&clock CLK_SPDIF>, + <&clock CLK_81>; + clock-names = "mpll1", "i958", "mclk", "spdif", "clk_81"; + }; + pcm_dai: PCM { + #sound-dai-cells = <0>; + compatible = "amlogic, aml-pcm-dai"; + pinctrl-names = "aml_audio_btpcm"; + pinctrl-0 = <&audio_btpcm_pins>; + clocks = <&clock CLK_MPLL0>, + <&clock CLK_PCM_MCLK>, + <&clock CLK_PCM_SCLK>; + clock-names = "mpll0", "pcm_mclk", "pcm_sclk"; + pcm_mode = <1>; /* 0=slave mode, 1=master mode */ + }; + i2s_plat: i2s_platform { + compatible = "amlogic, aml-i2s"; + interrupts = <0 29 1>; + }; + pcm_plat: pcm_platform { + compatible = "amlogic, aml-pcm"; + }; + spdif_codec: spdif_codec{ + #sound-dai-cells = <0>; + compatible = "amlogic, aml-spdif-codec"; + pinctrl-names = "aml_audio_spdif"; + pinctrl-0 = <&audio_spdif_pins>; + }; + pcm_codec: pcm_codec{ + #sound-dai-cells = <0>; + compatible = "amlogic, pcm2BT-codec"; + }; + /* endof AUDIO MESON8 DEVICES */ + + /* AUDIO board specific */ + dummy_codec:dummy{ + #sound-dai-cells = <0>; + compatible = "amlogic, aml_dummy_codec"; + status = "disable"; + }; + amlogic_codec:t9015{ + #sound-dai-cells = <0>; + compatible = "amlogic, aml_codec_T9015"; + reg = <0x0 0xc8832000 0x0 0x14>; + status = "okay"; + }; + aml_m8_snd { + compatible = "aml, aml_snd_m8"; + status = "okay"; + aml-sound-card,format = "i2s"; + aml_sound_card,name = "AML-M8AUDIO"; + aml,audio-routing = + "Ext Spk","LOUTL", + "Ext Spk","LOUTR"; + + mute_gpio-gpios = <&gpio GPIOH_5 0>; + mute_inv; + hp_disable; + hp_paraments = <800 300 0 5 1>; + pinctrl-names = "aml_snd_m8"; + pinctrl-0 = <&audio_pins>; + cpu_list = <&cpudai0 &cpudai1 &cpudai2>; + codec_list = <&codec0 &codec1 &codec2>; + plat_list = <&i2s_plat &i2s_plat &pcm_plat>; + cpudai0: cpudai0 { + sound-dai = <&i2s_dai>; + }; + cpudai1: cpudai1 { + sound-dai = <&spdif_dai>; + }; + cpudai2: cpudai2 { + sound-dai = <&pcm_dai>; + }; + codec0: codec0 { + sound-dai = <&amlogic_codec>; + }; + codec1: codec1 { + sound-dai = <&spdif_codec>; + }; + codec2: codec2 { + sound-dai = <&pcm_codec>; + }; + }; + /* END OF AUDIO board specific */ + + gpio_keypad{ + compatible = "amlogic, gpio_keypad"; + status = "okay"; + scan_period = <20>; + key_num = <1>; + key_name = "power"; + key_code = <116>; + key_pin = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_HIGH>; /*"GPIOAO_2";*/ + irq_keyup = <6>; + irq_keydown = <7>; + }; + adc_keypad{ + compatible = "amlogic, adc_keypad"; + status = "okay"; + key_name = "home"; + key_num = <1>; + key_code = <300>; + key_chan = <0>; + key_val = <10>; + key_tolerance = <40>; + }; + + aml_sensor0: aml-sensor@0 { + compatible = "amlogic, aml-thermal"; + device_name = "thermal"; + #thermal-sensor-cells = <1>; + cooling_devices { + cpufreq_cool_cluster0 { + min_state = <1000000>; + dyn_coeff = <140>; + cluster_id = <0>; + node_name = "cpus"; + device_type = "cpufreq"; + }; + cpucore_cool_cluster0 { + min_state = <1>; + dyn_coeff = <0>; + cluster_id = <0>; + node_name = "cpu_core_cluster0"; + device_type = "cpucore"; + }; + gpufreq_cool { + min_state = <400>; + dyn_coeff = <437>; + cluster_id = <0>; + node_name = "mali"; + device_type = "gpufreq"; + }; + gpucore_cool { + min_state = <1>; + dyn_coeff = <0>; + cluster_id = <0>; + node_name = "thermal_gpu_cores"; + device_type = "gpucore"; + }; + }; + cpu_cluster0:cpu_core_cluster0 { + #cooling-cells = <2>; /* min followed by max */ + }; + gpucore:thermal_gpu_cores { + #cooling-cells = <2>; /* min followed by max */ + }; + }; + thermal-zones { + soc_thermal { + polling-delay = <1000>; + polling-delay-passive = <100>; + sustainable-power = <2150>; + + thermal-sensors = <&aml_sensor0 3>; + + trips { + switch_on: trip-point@0 { + temperature = <70000>; + hysteresis = <1000>; + type = "passive"; + }; + control: trip-point@1 { + temperature = <80000>; + hysteresis = <1000>; + type = "passive"; + }; + hot: trip-point@2 { + temperature = <85000>; + hysteresis = <5000>; + type = "hot"; + }; + critical: trip-point@3 { + temperature = <260000>; + hysteresis = <1000>; + type = "critical"; + }; + }; + + cooling-maps { + cpufreq_cooling_map { + trip = <&control>; + cooling-device = <&cpus 0 4>; + contribution = <1024>; + }; + cpucore_cooling_map { + trip = <&control>; + cooling-device = <&cpu_cluster0 0 3>; + contribution = <1024>; + }; + gpufreq_cooling_map { + trip = <&control>; + cooling-device = <&gpu 0 4>; + contribution = <1024>; + }; + gpucore_cooling_map { + trip = <&control>; + cooling-device = <&gpucore 0 2>; + contribution = <1024>; + }; + }; + }; + }; +}; + +&pinmux { + audio_pins:audio_pin{ + amlogic,setmask=<6 0x7800000>; + amlogic,clrmask=<6 0x07e0000>; + amlogic,pins = "GPIOH_6","GPIOH_7","GPIOH_8","GPIOH_9"; + }; + + audio_spdif_pins:audio_pin1{ + amlogic,setmask=<6 0x10000000>; /*spdif_out*/ + amlogic,clrmask=<6 0x8000000>; + amlogic,pins ="GPIOH_4"; /*spdif_out*/ + }; + + audio_btpcm_pins:audio_btpcm_pins{ + /* BT PCM PINMUX SETTING*/ + amlogic,setmask=<5 0xf00000>; + amlogic,clrmask=<5 0x3c33>; + amlogic,pins ="GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11"; + }; +}; +&efuse { + status = "okay"; +}; +&audio_data{ + status = "okay"; +}; +&defendkey { + status = "okay"; +}; +&i2c_b { + status = "okay"; + kvim_hym8563{ + compatible = "kvim_hym8563"; + reg = <0x51>; + }; +}; diff --git a/arch/arm64/boot/dts/kvim_nougat.dts b/arch/arm64/boot/dts/kvim_nougat.dts new file mode 100644 index 0000000000000..de28c5b902748 --- /dev/null +++ b/arch/arm64/boot/dts/kvim_nougat.dts @@ -0,0 +1,1090 @@ +/* + * arch/arm64/boot/dts/amlogic/kvim.dts + * + * Copyright (C) 2015 Amlogic, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * +*/ + +/dts-v1/; + +#include +#include +#include +#include +#include +#include "mesongxl.dtsi" +#include "partitions-android.dtsi" +/ { + model = "Amlogic"; + amlogic-dt-id = "kvim"; + compatible = "amlogic, Gxbb"; + interrupt-parent = <&gic>; + #address-cells = <2>; + #size-cells = <2>; + + aliases { + serial0 = &uart_AO; + serial1 = &uart_A; + serial2 = &uart_B; + serial3 = &uart_C; + serial4 = &uart_AO_B; + }; + + memory@00000000 { + device_type = "memory"; + linux,usable-memory = <0x0 0x100000 0x0 0x7ff00000>; + }; + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + /* global autoconfigured region for contiguous allocations */ + secmon_reserved:linux,secmon { + compatible = "amlogic, aml_secmon_memory"; + reg = <0x0 0x10000000 0x0 0x200000>; + no-map; + }; + secos_reserved:linux,secos { + status = "disable"; + compatible = "amlogic, aml_secos_memory"; + reg = <0x0 0x05300000 0x0 0x2000000>; + no-map; + }; + pstore:aml_pstore { + compatible = "amlogic, pstore"; + reg = <0x0 0x07300000 0x0 0x100000>; + no-map; + }; + fb_reserved:linux,meson-fb { + compatible = "amlogic, fb-memory"; + size = <0x0 0x2000000>; + no-map; + }; + + di_reserved:linux,di { + compatible = "amlogic, di-mem"; + size = <0x0 0x1e00000>; //10x1920x1088x3/2=30M + //no-map; + }; + + ion_reserved:linux,ion-dev { + compatible = "amlogic, idev-mem"; + size = <0x0 0x3000000>; + }; + + /* vdin0 */ +// vdin0_reserved:linux,vdin0 { +// compatible = "amlogic, vdin_memory"; + /* 1920x1080x2x4 =17M */ +// size = <0x0 0x01000000>; +// }; + /* vdin1 */ +// vdin1_reserved:linux,vdin1 { +// compatible = "amlogic, vdin_memory"; + /* 1920x1080x2x4 =17M */ +// size = <0x0 0x01000000>; +// }; + /* POST PROCESS MANAGER */ + ppmgr_reserved:linux,ppmgr { + compatible = "shared-dma-pool"; + size = <0x0 0x0>; + }; + + codec_mm_cma:linux,codec_mm_cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0xc000000>; + alignment = <0x0 0x400000>; + linux,contiguous-region; + }; + picdec_cma_reserved:linux,picdec { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x0>; + alignment = <0x0 0x0>; + linux,contiguous-region; + }; + /* codec shared reserved */ + codec_mm_reserved:linux,codec_mm_reserved { + compatible = "amlogic, codec-mm-reserved"; + size = <0x0 0x4100000>; + alignment = <0x0 0x100000>; + //no-map; + }; + /*vm_reserved:linux,vm { + compatible = "amlogic, vm_memory"; + size = <0x0 0x2000000>; + };*/ + + }; + + sysled { + compatible = "amlogic, sysled"; + dev_name = "sysled"; + status = "okay"; + led_gpio = <&gpio_ao GPIOAO_9 GPIO_ACTIVE_HIGH>; + led_active_low = <1>; + }; + + meson-vout { + compatible = "amlogic, meson-vout"; + dev_name = "meson-vout"; + status = "okay"; + }; + meson-fb { + compatible = "amlogic, meson-fb"; + memory-region = <&fb_reserved>; + dev_name = "meson-fb"; + status = "okay"; + interrupts = <0 3 1 + 0 89 1>; + interrupt-names = "viu-vsync", "rdma"; + mem_size = <0x01800000 0x00100000>; /* fb0/fb1 memory size */ + display_mode_default = "1080p60hz"; + scale_mode = <1>; /** 0:VPU free scale 1:OSD free scale 2:OSD super scale */ + display_size_default = <1920 1080 1920 3240 32>; //1920*1080*4*3 = 0x17BB000 + }; + ge2d { + compatible = "amlogic, ge2d"; + dev_name = "ge2d"; + status = "okay"; + interrupts = <0 150 1>; + interrupt-names = "ge2d"; + clocks = <&clock CLK_VAPB_0>, + <&clock CLK_GE2D>; + clock-names = "clk_vapb_0", + "clk_ge2d"; + resets = <&clock GCLK_IDX_GE2D>; + reset-names = "ge2d"; + }; + codec_io { + compatible = "amlogic, codec_io"; + #address-cells=<2>; + #size-cells=<2>; + ranges; + io_cbus_base{ + reg = <0x0 0xC1100000 0x0 0x100000>; + }; + io_dos_base{ + reg = <0x0 0xc8820000 0x0 0x10000>; + }; + io_hiubus_base{ + reg = <0x0 0xc883c000 0x0 0x2000>; + }; + io_aobus_base{ + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + io_vcbus_base{ + reg = <0x0 0xd0100000 0x0 0x40000>; + }; + io_dmc_base{ + reg = <0x0 0xc8838000 0x0 0x400>; + }; + }; + codec_mm { + compatible = "amlogic, codec, mm"; + memory-region = <&codec_mm_cma &codec_mm_reserved>; + dev_name = "codec_mm"; + status = "okay"; + }; + ethmac: ethernet@0xc9410000 { + compatible = "amlogic, gxbb-rmii-dwmac"; + reg = <0x0 0xc9410000 0x0 0x10000 + 0x0 0xc8834540 0x0 0x8 + 0x0 0xc8834558 0x0 0xc>; + interrupts = <0 8 1>; + phy-mode= "rmii"; + mc_val = <0x1800>; + resets = <&clock GCLK_IDX_ETHERNET>; + reset-names = "ethpower"; + interrupt-names = "macirq"; + clocks = <&clock CLK_81>; + clock-names = "ethclk81"; + internal_phy=<1>; + }; + mesonstream { + compatible = "amlogic, codec, streambuf"; + dev_name = "mesonstream"; + status = "okay"; + resets = <&clock GCLK_IDX_HIU_PARSER_TOP + &clock GCLK_IDX_VPU_INTR + &clock GCLK_IDX_DEMUX + &clock GCLK_IDX_DOS>; + reset-names = "parser_top", + "vpu_intr", + "demux", + "vdec"; + }; + + amvideocap { + compatible = "amlogic, amvideocap"; + dev_name = "amvideocap.0"; + status = "okay"; + max_size = <8>;//8M + }; + + ion_dev { + compatible = "amlogic, ion_dev"; + memory-region = <&ion_reserved>; + }; + + vdec { + compatible = "amlogic, vdec"; + dev_name = "vdec.0"; + status = "okay"; + interrupts = <0 3 1 + 0 23 1 + 0 32 1 + 0 43 1 + 0 44 1 + 0 45 1>; + interrupt-names = "vsync", + "demux", + "parser", + "mailbox_0", + "mailbox_1", + "mailbox_2"; + }; + picdec { + compatible = "amlogic, picdec"; + memory-region = <&picdec_cma_reserved>; + dev_name = "picdec"; + status = "okay"; + }; + ppmgr { + compatible = "amlogic, ppmgr";//to match of_device_id's compatible member + memory-region = <&ppmgr_reserved>; + dev_name = "ppmgr"; + status = "okay"; + }; + deinterlace { + compatible = "amlogic, deinterlace"; + status = "okay"; + memory-region = <&di_reserved>; + interrupts = <0 46 1 + 0 6 1>; + interrupt-names = "de_irq", + "timerc"; + buffer-size = <3133440>; //1920x1088x3/2 + hw-version = <2>; + }; +/* vdin0 { + compatible = "amlogic, vdin"; + memory-region = <&vdin0_reserved>; + dev_name = "vdin0"; + status = "ok"; + reserve-iomap = "true"; + interrupts = <0 83 1>; + rdma-irq = <2>; + clocks = <&clock CLK_XTAL>, + <&clock CLK_VID_LOCK_CLK>; + clock-names = "xtal", "cts_vid_lock_clk"; + vdin_id = <0>; + }; + vdin { + compatible = "amlogic, vdin"; + memory-region = <&vdin1_reserved>; + dev_name = "vdin1"; + status = "ok"; + reserve-iomap = "true"; + interrupts = <0 85 1>; + rdma-irq = <4>; + clocks = <&clock CLK_XTAL>, + <&clock CLK_VID_LOCK_CLK>; + clock-names = "xtal", "cts_vid_lock_clk"; + vdin_id = <1>; + };*/ + amvdec_656in0 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in0"; + status = "ok"; + reg = <0x0 0xd0048000 0x0 0x7c>; + clocks = <&clock CLK_FPLL_DIV2>, + <&clock CLK_BT656_CLK0>; + clock-names = "fclk_div2", "cts_bt656_clk0"; + bt656_id = <0>; + }; + amvdec_656in1 { + compatible = "amlogic, amvdec_656in"; + dev_name = "amvdec_656in1"; + status = "ok"; + reg = <0x0 0xd0050000 0x0 0x7c>; + clocks = <&clock CLK_FPLL_DIV2>, + <&clock CLK_BT656_CLK1>; + clock-names = "fclk_div2", "cts_bt656_clk1"; + bt656_id = <1>; + }; + amlvecm { + compatible = "amlogic, vecm"; + dev_name = "aml_vecm"; + status = "okay"; + gamma_en = <0>;/*1:enabel ;0:disable*/ + wb_en = <0>;/*1:enabel ;0:disable*/ + cm_en = <0>;/*1:enabel ;0:disable*/ + }; + amvenc_avc{ + compatible = "amlogic, amvenc_avc"; + //memory-region = <&amvenc_avc_reserved>; + //memory-region = <&avc_cma_reserved>; + dev_name = "amvenc_avc"; + status = "okay"; + interrupts = <0 45 1>; + interrupt-names = "mailbox_2"; + }; + + + /*vm { + compatible = "amlogic, vm"; + memory-region = <&vm_reserved>; + dev_name = "vm"; + status = "okay"; + };*/ + + vpu { + compatible = "amlogic, vpu"; + dev_name = "vpu"; + status = "ok"; + clk_level = <7>; + /** 0: 100.0M 1: 166.7M 2: 200.0M + 3: 250.0M 4: 333.3M 5: 400.0M + 6: 500.0M 7: 666.7M */ + }; + //if use bt, open it + bt-dev{ + compatible = "amlogic, bt-dev"; + dev_name = "bt-dev"; + status = "okay"; + gpio_reset = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>; + }; + + rtc{ + compatible = "amlogic, aml_vrtc"; + alarm_reg_addr = <0xc81000a8>; + timer_e_addr = <0xc1109988>; + init_date = "2015/01/01"; + status = "okay"; + }; + + wifi{ + compatible = "amlogic, aml_wifi"; + dev_name = "aml_wifi"; + status = "okay"; + interrupt_pin = <&gpio GPIOX_7 GPIO_ACTIVE_HIGH>; + interrupts = < 0 68 4>; + irq_trigger_type = "GPIO_IRQ_LOW"; + power_on_pin = <&gpio GPIOX_6 GPIO_ACTIVE_HIGH>; + dhd_static_buf; //if use bcm wifi, config dhd_static_buf and 32k as bellow + pinctrl-names = "wifi_32k_pins"; + pinctrl-0 = <&wifi_32k_pins>; + }; + sd{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0072000 0x0 0x2000>; + interrupts = < 0 217 1 + 0 67 1 + 0 69 1>; + pinctrl-names = "sd_clk_cmd_pins", "sd_all_pins", "sd_1bit_pins","sd_clk_cmd_uart_pins","sd_1bit_uart_pins", "sd_to_ao_uart_pins", "ao_to_sd_uart_pins","ao_to_sd_jtag_pins","sd_to_ao_jtag_pins"; + pinctrl-0 = <&sd_clk_cmd_pins>; + pinctrl-1 = <&sd_all_pins>; + pinctrl-2 = <&sd_1bit_pins>; + pinctrl-3 = <&sd_clk_cmd_uart_pins>; + pinctrl-4 = <&sd_1bit_uart_pins>; + pinctrl-5 = <&sd_to_ao_uart_pins>; + pinctrl-6 = <&ao_to_sd_uart_pins>; + pinctrl-7 = <&ao_to_sd_jtag_pins>; + pinctrl-8 = <&sd_to_ao_jtag_pins>; + sd{ + status = "okay"; + pinname = "sd"; + ocr_avail = <0x00200080>; // 3.3:0x200000, 1.8+3.3:0x00200080 + caps = "MMC_CAP_4_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED"; + //"MMC_CAP_UHS_SDR12", + //"MMC_CAP_UHS_SDR25","MMC_CAP_UHS_SDR50", + //"MMC_CAP_UHS_SDR104"; + f_min = <400000>; + f_max = <100000000>; + max_req_size = <0x20000>; /**128KB*/ + gpio_dat3 = <&gpio CARD_4 GPIO_ACTIVE_HIGH>; + jtag_pin = <&gpio CARD_0 GPIO_ACTIVE_HIGH>; + gpio_cd = <&gpio CARD_6 GPIO_ACTIVE_HIGH>; + irq_in = <3>; + irq_out = <5>; + card_type = <5>; /* 0:unknown, 1:mmc card(include eMMC), 2:sd card(include tSD), 3:sdio device(ie:sdio-wifi), 4:SD combo (IO+mem) card, 5:NON sdio device(means sd/mmc card), other:reserved */ + }; + }; + emmc{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0074000 0x0 0x2000>; + interrupts = < 0 218 1>; + pinctrl-names = "emmc_clk_cmd_pins", "emmc_all_pins"; + pinctrl-0 = <&emmc_clk_cmd_pins>; + pinctrl-1 = <&emmc_conf_pull_up &emmc_conf_pull_done &emmc_all_pins>; + emmc{ + status = "disabled"; + pinname = "emmc"; + ocr_avail = <0x200080>; /**VDD voltage 3.3 ~ 3.4 */ + caps = "MMC_CAP_8_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE","MMC_CAP_1_8V_DDR", + "MMC_CAP_HW_RESET", "MMC_CAP_ERASE", "MMC_CAP_CMD23"; + caps2 = "MMC_CAP2_HS200", "MMC_CAP2_HS400"; + f_min = <300000>; + f_max = <100000000>; + max_req_size = <0x20000>; /**256KB*/ + gpio_dat3 = <&gpio BOOT_3 GPIO_ACTIVE_HIGH>; + hw_reset = <&gpio BOOT_9 GPIO_ACTIVE_HIGH>; + card_type = <1>; /* 1:mmc card(include eMMC), 2:sd card(include tSD), */ + }; + }; + sdio{ + compatible = "amlogic, aml_sd_emmc"; + dev_name = "aml_newsd.0"; + status = "okay"; + reg = <0x0 0xd0070000 0x0 0x2000>; + interrupts = < 0 216 4>; + pinctrl-names = "sdio_clk_cmd_pins", "sdio_all_pins"; + pinctrl-0 = <&sdio_clk_cmd_pins>; + pinctrl-1 = <&sdio_all_pins>; + sdio{ + status = "okay"; + pinname = "sdio"; + ocr_avail = <0x00200080>; /*3.3:0x200000, 1.8+3.3:0x00200080 */ + caps = "MMC_CAP_4_BIT_DATA","MMC_CAP_MMC_HIGHSPEED", + "MMC_CAP_SD_HIGHSPEED", "MMC_CAP_NONREMOVABLE", + "MMC_CAP_UHS_SDR12","MMC_CAP_UHS_SDR25", + "MMC_CAP_UHS_SDR50","MMC_CAP_UHS_SDR104", + "MMC_PM_KEEP_POWER","MMC_CAP_SDIO_IRQ"; + f_min = <400000>; + f_max = <200000000>; + max_req_size = <0x20000>; /**128KB*/ + card_type = <3>; /*3:sdio device(ie:sdio-wifi), 4:SD combo (IO+mem) card, */ + }; + }; + nand{ + compatible = "amlogic, aml_nand"; + dev_name = "nand"; + status = "disabled"; + reg = <0x0 0xd0074800 0x0 0x200>; + interrupts = < 0 34 1 >; + pinctrl-names = "nand_rb_mod","nand_norb_mod", "nand_cs_pins_only"; + pinctrl-0 = <&conf_nand_pulldown &conf_nand_pullup &all_nand_pins>; + pinctrl-1 = <&conf_nand_pulldown &conf_nand_pullup &all_nand_pins>; + pinctrl-2 = <&nand_cs_pins>; + device_id = <0>; + plat-names = "nandnormal"; + plat-num = <1>; + plat-part-0 = <&normal>; + normal: normal{ + enable_pad ="ce0","ce1","ce2","ce3"; + busy_pad = "rb0"; + }; + }; + aml_nftl{ + compatible = "amlogic, nftl"; + /* config nftl here */ + + }; + /*aml_cams{ + compatible = "amlogic, cams_prober"; + status = "okay"; + clocks = <&clock CLK_CAMERA_24M>; + clock-names = "clk_camera_24"; + pinctrl-names = "gpio"; + pinctrl-0 = <&aml_cam_gpio_pins> ; + cam_0{ + cam_name = "sp2518"; + front_back = <0>; + i2c_bus = "i2c_bus_a"; + gpio_pwdn-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_HIGH>; + gpio_rst-gpios = <&gpio GPIOZ_12 GPIO_ACTIVE_HIGH>; + mirror_flip = <1>; + vertical_flip = <1>; + spread_spectrum = <0>; //0:none; 1:0.3%; 2:0.6%; 3:1.25%; 4:2.5%; 5:5% + bt_path = "gpio"; + status = "okay"; + }; + };*/ + + unifykey{ + compatible = "amlogic, unifykey"; + status = "ok"; + + unifykey-num = <14>; + unifykey-index-0 = <&keysn_0>; + unifykey-index-1 = <&keysn_1>; + unifykey-index-2 = <&keysn_2>; + unifykey-index-3 = <&keysn_3>; + unifykey-index-4 = <&keysn_4>; + unifykey-index-5 = <&keysn_5>; + unifykey-index-6 = <&keysn_6>; + unifykey-index-7 = <&keysn_7>; + unifykey-index-8 = <&keysn_8>; + unifykey-index-9 = <&keysn_9>; + unifykey-index-10= <&keysn_10>; + unifykey-index-11= <&keysn_11>; + unifykey-index-12= <&keysn_12>; + unifykey-index-13= <&keysn_13>; + + keysn_0: key_0{ + key-name = "usid"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_1:key_1{ + key-name = "mac"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_2:key_2{ + key-name = "hdcp"; + key-device = "secure"; + key-type = "sha1"; + key-permit = "read","write","del"; + }; + keysn_3:key_3{ + key-name = "secure_boot_set"; + key-device = "efuse"; + key-permit = "write"; + }; + keysn_4:key_4{ + key-name = "mac_bt"; + key-device = "normal"; + key-permit = "read","write","del"; + key-type = "mac"; + }; + keysn_5:key_5{ + key-name = "mac_wifi"; + key-device = "normal"; + key-permit = "read","write","del"; + key-type = "mac"; + }; + keysn_6:key_6{ + key-name = "hdcp2_tx"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_7:key_7{ + key-name = "hdcp2_rx"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_8:key_8{ + key-name = "widevinekeybox"; + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_9:key_9{ + key-name = "deviceid"; + key-device = "normal"; + key-permit = "read","write","del"; + }; + keysn_10:key_10{ + key-name = "hdcp22_fw_private"; + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_11:key_11{ + key-name = "PlayReadykeybox25"; + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_12:key_12{ + key-name = "prpubkeybox";// PlayReady + key-device = "secure"; + key-permit = "read","write","del"; + }; + keysn_13:key_13{ + key-name = "prprivkeybox";// PlayReady + key-device = "secure"; + key-permit = "read","write","del"; + }; + };//End unifykey + amhdmitx: amhdmitx{ + compatible = "amlogic, amhdmitx"; + dev_name = "amhdmitx"; + status = "okay"; + pinctrl-names="hdmitx_hpd", "hdmitx_ddc"; + pinctrl-0=<&hdmitx_hpd>; + pinctrl-1=<&hdmitx_ddc>; + /* HPD, 57 + 32 = 89; CEC, 151 + 32 = 183*/ + interrupts = <0 57 1>; + interrupt-names = "hdmitx_hpd"; + clocks = <&clock CLK_HDMITX_SYS &clock CLK_HDMITX_ENCP + &clock CLK_HDMITX_ENCI &clock CLK_HDMITX_PIXEL + &clock CLK_HDMITX_PHY &clock CLK_VID>; + clock-names = "hdmitx_clk_sys", "hdmitx_clk_encp", "hdmitx_clk_enci", + "hdmitx_clk_pixel", "hdmitx_clk_phy", "hdmitx_clk_vid"; + gpio_i2c_en = <0x1>; + #address-cells = <2>; + #size-cells = <2>; + ranges; + }; + + aocec: aocec{ + compatible = "amlogic, amlogic-aocec"; + device_name = "aocec"; + status = "okay"; + vendor_name = "Amlogic"; /* Max Chars: 8 */ + vendor_id = <0x000000>; /* Refer to http://standards.ieee.org/develop/regauth/oui/oui.txt */ + product_desc = "GXBB Mbox"; /* Max Chars: 16 */ + cec_osd_string = "MBox"; /* Max Chars: 14 */ + port_num = <1>; + arc_port_mask = <0x0>; + interrupts = <0 199 1>; + interrupt-names = "hdmi_aocec"; + pinctrl-names = "hdmitx_aocec"; + pinctrl-0=<&hdmitx_aocec>; + reg = <0x0 0xc810023c 0x0 0x4 + 0x0 0xc8100000 0x0 0x200>; + }; + + tvout { + compatible = "amlogic, tvout"; + dev_name = "tvout"; + status = "okay"; + }; + + i2c_gpio: i2c_gpio { + compatible = "i2c-gpio"; + status = "okay"; + dev_name = "i2c-gpio"; + i2c-gpio,delay-us = <10>; /* 50 kHz */ + gpios = <&gpio GPIOH_1 0 + &gpio GPIOH_2 0>; + #address-cells = <2>; + #size-cells = <2>; + i2c-gpio,timeout-ms = <10>; + i2c_gpio_edid: i2c_gpio_edid { + compatible = "i2c-gpio-edid"; + reg = <0x50 0x0 0x0 0x0>; + }; + }; + + uart_AO: serial@c81004c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004c0 0x0 0x18>; + interrupts = <0 193 1>; + status = "okay"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + xtal_tick_en = <1>; + fifosize = < 64 >; + pinctrl-names = "default"; + //pinctrl-0 = <&ao_uart_pins>; + support-sysrq = <0>; /* 0 not support , 1 support */ + }; + uart_A: serial@c11084c0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084c0 0x0 0x18>; + interrupts = <0 26 1>; + status = "okay"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 128 >; + pinctrl-names = "default"; + pinctrl-0 = <&a_uart_pins>; + resets = <&clock GCLK_IDX_UART0>; + }; + uart_B: serial@c11084dc { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084dc 0x0 0x18>; + interrupts = <0 75 1>; + status = "disable"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 64 >; + pinctrl-names = "default"; + pinctrl-0 = <&b_uart_pins>; + resets = <&clock GCLK_IDX_UART1>; + }; + uart_C: serial@c1108700 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc1108700 0x0 0x18>; + interrupts = <0 93 1>; + status = "disable"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 64 >; + pinctrl-names = "default"; + pinctrl-0 = <&c_uart_pins>; + resets = <&clock GCLK_IDX_UART2>; + }; + uart_AO_B: serial@c81004e0 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc81004e0 0x0 0x18>; + interrupts = <0 197 1>; + status = "disable"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 64 >; + pinctrl-names = "default"; + pinctrl-0 = <&ao_b_uart_pins>; + }; + + + canvas{ + compatible = "amlogic, meson, canvas"; + dev_name = "amlogic-canvas"; + status = "ok"; + reg = <0x0 0xc8838000 0x0 0x400>; + }; + + rdma{ + compatible = "amlogic, meson, rdma"; + dev_name = "amlogic-rdma"; + status = "ok"; + interrupts = <0 89 1>; + interrupt-names = "rdma"; + }; + + dwc3: dwc3@c9000000 { + compatible = "synopsys, dwc3"; + reg = <0x0 0xc9000000 0x0 0x100000>; + interrupts = <0 30 4>; + usb-phy = <&usb2_phy>, <&usb3_phy>; + cpu-type = "gxl"; + clock-src = "usb3.0"; + }; + + usb2_phy: usb2phy@d0078000 { + compatible = "amlogic, amlogic-new-usb2"; + portnum = <2>; + reg = <0x0 0xd0078000 0x0 0x80>; + }; + + usb3_phy: usb3phy@d0078080 { + compatible = "amlogic, amlogic-new-usb3"; + portnum = <0>; + reg = <0x0 0xd0078080 0x0 0x20>; + }; + + dwc2_a { + compatible = "amlogic,dwc2"; + device_name = "dwc2_a"; + reg = <0x0 0xc9100000 0x0 0x40000>; + status = "okay"; + interrupts = <0 31 4>; + pl-periph-id = <0>; /** lm name */ + clock-src = "usb0"; /** clock src */ + port-id = <0>; /** ref to mach/usb.h */ + port-type = <2>; /** 0: otg, 1: host, 2: slave */ + port-speed = <0>; /** 0: default, high, 1: full */ + port-config = <0>; /** 0: default */ + port-dma = <0>; /** 0: default, 1: single, 2: incr, 3: incr4, 4: incr8, 5: incr16, 6: disable*/ + port-id-mode = <0>; /** 0: hardware, 1: sw_host, 2: sw_slave*/ + usb-fifo = <728>; + cpu-type = "gxl"; + controller-type = <2>; /** 0: normal, 1: otg+dwc3 host only, 2: otg+dwc3 device only*/ + phy-reg = <0xd0078000>; + phy-reg-size = <0xa0>; + resets = <&clock GCLK_IDX_USB_GENERAL + &clock GCLK_IDX_MISC_USB1_TO_DDR + &clock GCLK_IDX_USB1>; + reset-names = "usb_general", + "usb1", + "usb1_to_ddr"; + }; + + + /* AUDIO MESON8 DEVICES */ + i2s_dai: I2S { + #sound-dai-cells = <0>; + resets = < + &clock GCLK_IDX_AIU_AI_TOP_GLUE + &clock GCLK_IDX_AUD_BUF_ABD + &clock GCLK_IDX_AIU_I2S_OUT + &clock GCLK_IDX_AIU_AMCLK_MEASURE + &clock GCLK_IDX_AIU_AIFIFO2 + &clock GCLK_IDX_AIU_AUD_MIXER + &clock GCLK_IDX_AIU_MIXER_REG + &clock GCLK_IDX_AIU_ADC + &clock GCLK_IDX_AIU_TOP_LEVEL + &clock GCLK_IDX_AIU_AOCLK + &clock GCLK_IDX_AUD_IN + >; + reset-names = + "top_glue", + "aud_buf", + "i2s_out", + "amclk_measure", + "aififo2", + "aud_mixer", + "mixer_reg", + "adc", + "top_level", + "aoclk", + "aud_in"; + clocks = <&clock CLK_MPLL2>, + <&clock CLK_AMCLK>; + clock-names = "mpll2", "mclk"; + compatible = "amlogic, aml-i2s-dai"; + }; + spdif_dai: SPDIF { + #sound-dai-cells = <0>; + compatible = "amlogic, aml-spdif-dai"; + resets = < + &clock GCLK_IDX_AIU_IEC958 + &clock GCLK_IDX_AIU_ICE958_AMCLK + >; + reset-names = + "iec958", + "iec958_amclk"; + clocks = <&clock CLK_MPLL1>, + <&clock CLK_I958>, + <&clock CLK_AMCLK>, + <&clock CLK_SPDIF>, + <&clock CLK_81>; + clock-names = "mpll1", "i958", "mclk", "spdif", "clk_81"; + }; + pcm_dai: PCM { + #sound-dai-cells = <0>; + compatible = "amlogic, aml-pcm-dai"; + pinctrl-names = "aml_audio_btpcm"; + pinctrl-0 = <&audio_btpcm_pins>; + clocks = <&clock CLK_MPLL0>, + <&clock CLK_PCM_MCLK>, + <&clock CLK_PCM_SCLK>; + clock-names = "mpll0", "pcm_mclk", "pcm_sclk"; + pcm_mode = <1>; /* 0=slave mode, 1=master mode */ + }; + i2s_plat: i2s_platform { + compatible = "amlogic, aml-i2s"; + interrupts = <0 29 1>; + }; + pcm_plat: pcm_platform { + compatible = "amlogic, aml-pcm"; + }; + spdif_codec: spdif_codec{ + #sound-dai-cells = <0>; + compatible = "amlogic, aml-spdif-codec"; + pinctrl-names = "aml_audio_spdif"; + pinctrl-0 = <&audio_spdif_pins>; + }; + pcm_codec: pcm_codec{ + #sound-dai-cells = <0>; + compatible = "amlogic, pcm2BT-codec"; + }; + /* endof AUDIO MESON8 DEVICES */ + + /* AUDIO board specific */ + dummy_codec:dummy{ + #sound-dai-cells = <0>; + compatible = "amlogic, aml_dummy_codec"; + status = "disable"; + }; + amlogic_codec:t9015{ + #sound-dai-cells = <0>; + compatible = "amlogic, aml_codec_T9015"; + reg = <0x0 0xc8832000 0x0 0x14>; + status = "okay"; + }; + aml_m8_snd { + compatible = "aml, aml_snd_m8"; + status = "okay"; + aml-sound-card,format = "i2s"; + aml_sound_card,name = "AML-M8AUDIO"; + aml,audio-routing = + "Ext Spk","LOUTL", + "Ext Spk","LOUTR"; + + mute_gpio-gpios = <&gpio GPIOH_5 0>; + mute_inv; + hp_disable; + hp_paraments = <800 300 0 5 1>; + pinctrl-names = "aml_snd_m8"; + pinctrl-0 = <&audio_pins>; + cpu_list = <&cpudai0 &cpudai1 &cpudai2>; + codec_list = <&codec0 &codec1 &codec2>; + plat_list = <&i2s_plat &i2s_plat &pcm_plat>; + cpudai0: cpudai0 { + sound-dai = <&i2s_dai>; + }; + cpudai1: cpudai1 { + sound-dai = <&spdif_dai>; + }; + cpudai2: cpudai2 { + sound-dai = <&pcm_dai>; + }; + codec0: codec0 { + sound-dai = <&amlogic_codec>; + }; + codec1: codec1 { + sound-dai = <&spdif_codec>; + }; + codec2: codec2 { + sound-dai = <&pcm_codec>; + }; + }; + /* END OF AUDIO board specific */ + + gpio_keypad{ + compatible = "amlogic, gpio_keypad"; + status = "okay"; + scan_period = <20>; + key_num = <1>; + key_name = "power"; + key_code = <116>; + key_pin = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_HIGH>; /*"GPIOAO_2";*/ + irq_keyup = <6>; + irq_keydown = <7>; + }; + adc_keypad{ + compatible = "amlogic, adc_keypad"; + status = "okay"; + key_name = "home"; + key_num = <1>; + key_code = <300>; + key_chan = <0>; + key_val = <10>; + key_tolerance = <40>; + }; + + aml_sensor0: aml-sensor@0 { + compatible = "amlogic, aml-thermal"; + device_name = "thermal"; + #thermal-sensor-cells = <1>; + cooling_devices { + cpufreq_cool_cluster0 { + min_state = <1000000>; + dyn_coeff = <140>; + cluster_id = <0>; + node_name = "cpus"; + device_type = "cpufreq"; + }; + cpucore_cool_cluster0 { + min_state = <1>; + dyn_coeff = <0>; + cluster_id = <0>; + node_name = "cpu_core_cluster0"; + device_type = "cpucore"; + }; + gpufreq_cool { + min_state = <400>; + dyn_coeff = <437>; + cluster_id = <0>; + node_name = "mali"; + device_type = "gpufreq"; + }; + gpucore_cool { + min_state = <1>; + dyn_coeff = <0>; + cluster_id = <0>; + node_name = "thermal_gpu_cores"; + device_type = "gpucore"; + }; + }; + cpu_cluster0:cpu_core_cluster0 { + #cooling-cells = <2>; /* min followed by max */ + }; + gpucore:thermal_gpu_cores { + #cooling-cells = <2>; /* min followed by max */ + }; + }; + thermal-zones { + soc_thermal { + polling-delay = <1000>; + polling-delay-passive = <100>; + sustainable-power = <2150>; + + thermal-sensors = <&aml_sensor0 3>; + + trips { + switch_on: trip-point@0 { + temperature = <70000>; + hysteresis = <1000>; + type = "passive"; + }; + control: trip-point@1 { + temperature = <80000>; + hysteresis = <1000>; + type = "passive"; + }; + hot: trip-point@2 { + temperature = <85000>; + hysteresis = <5000>; + type = "hot"; + }; + critical: trip-point@3 { + temperature = <260000>; + hysteresis = <1000>; + type = "critical"; + }; + }; + + cooling-maps { + cpufreq_cooling_map { + trip = <&control>; + cooling-device = <&cpus 0 4>; + contribution = <1024>; + }; + cpucore_cooling_map { + trip = <&control>; + cooling-device = <&cpu_cluster0 0 3>; + contribution = <1024>; + }; + gpufreq_cooling_map { + trip = <&control>; + cooling-device = <&gpu 0 4>; + contribution = <1024>; + }; + gpucore_cooling_map { + trip = <&control>; + cooling-device = <&gpucore 0 2>; + contribution = <1024>; + }; + }; + }; + }; +}; + +&pinmux { + audio_pins:audio_pin{ + amlogic,setmask=<6 0x7800000>; + amlogic,clrmask=<6 0x07e0000>; + amlogic,pins = "GPIOH_6","GPIOH_7","GPIOH_8","GPIOH_9"; + }; + + audio_spdif_pins:audio_pin1{ + amlogic,setmask=<6 0x10000000>; /*spdif_out*/ + amlogic,clrmask=<6 0x8000000>; + amlogic,pins ="GPIOH_4"; /*spdif_out*/ + }; + + audio_btpcm_pins:audio_btpcm_pins{ + /* BT PCM PINMUX SETTING*/ + amlogic,setmask=<5 0xf00000>; + amlogic,clrmask=<5 0x3c33>; + amlogic,pins ="GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11"; + }; +}; +&efuse { + status = "okay"; +}; +&audio_data{ + status = "okay"; +}; +&defendkey { + status = "okay"; +}; +&i2c_b { + status = "okay"; + kvim_hym8563{ + compatible = "kvim_hym8563"; + reg = <0x51>; + }; +}; diff --git a/arch/arm64/boot/dts/mesongxbb-gpu-mali450.dtsi b/arch/arm64/boot/dts/mesongxbb-gpu-mali450.dtsi new file mode 100644 index 0000000000000..095823dfc85cd --- /dev/null +++ b/arch/arm64/boot/dts/mesongxbb-gpu-mali450.dtsi @@ -0,0 +1,134 @@ +/* + * Amlogic GXBB Platform gpu + * + * Copyright (c) 2015-2015 Amlogic Ltd + * + * This file is licensed under a dual GPLv2 or BSD license. + * + */ + +/ { + gpu:mali@d00c0000{ + #cooling-cells = <2>; /* min followed by max */ + compatible = "arm,mali-450"; + interrupt-parent = <&gic>; + reg = <0 0xd00c0000 0 0x40000>, /*mali APB bus base address*/ + <0 0xc883c000 0 0x01000>, /*hiubus base address for gpu clk cntl*/ + <0 0xc8100000 0 0x01000>, /*aobus base address for gpu pmu domain*/ + <0 0xc883c000 0 0x01000>, /*hiubus base address for gpu clk cntl*/ + <0 0xc1104440 0 0x01000>; + interrupts = <0 160 4>, <0 161 4>, <0 162 4>, <0 163 4>, + <0 164 4>, <0 165 4>, <0 166 4>, <0 167 4>, + <0 168 4>, <0 169 4>; + interrupt-names = "IRQGP", "IRQGPMMU", "IRQPP", "IRQPMU", + "IRQPP0", "IRQPPMMU0", "IRQPP1", "IRQPPMMU1", + "IRQPP2", "IRQPPMMU2"; + pmu_domain_config = <0x1 0x2 0x4 0x4 0x0 0x0 0x0 0x0 0x0 0x1 0x2 0x0>; + pmu_switch_delay = <0xffff> ; + num_of_pp = <3> ; + def_clk = <3>; + sc_mpp = <3>;/* number of pp used most of time.*/ + tbl = <&clk125_cfg &clk285_cfg &clk400_cfg &clk500_cfg &clk666_cfg &clk800_cfg>; + + clocks = <&clock CLK_FPLL_DIV3>, + <&clock CLK_FPLL_DIV4>, + <&clock CLK_FPLL_DIV5>, + <&clock CLK_FPLL_DIV7>, + <&clock GP0_PLL>, + <&clock CLK_MALI>, + <&clock CLK_MALI_0>, + <&clock CLK_MALI_1>; + clock-names = + "fclk_div3", + "fclk_div4", + "fclk_div5", + "fclk_div7", + "gp0_pll", + "clk_mali", + "clk_mali_0", + "clk_mali_1"; + + /*control_interval x keep_count == 900 - 1000ms */ + control_interval = <200>; + + clk125_cfg:clk125_cfg { + clk_freq = <125000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <30 250>; + }; + + clk250_cfg:clk250_cfg { + clk_freq = <250000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <115 250>; + /*125 = 250*(125/250), 50= 60-10*/ + }; + + clk285_cfg:clk285_cfg { + clk_freq = <285000000>; + clk_parent = "fclk_div7"; + clkp_freq = <285000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <100 250>; + /*109 = 250*(125/285)*/ + }; + + clk400_cfg:clk400_cfg { + clk_freq = <400000000>; + clk_parent = "fclk_div5"; + clkp_freq = <400000000>; + voltage = <1150>; + keep_count = <3>; + threshold = <168 250>; + /*178 = 250*(285/400)*/ + }; + + clk500_cfg:clk500_cfg { + clk_freq = <500000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <2>; + threshold = <190 250>; + /*200=250*(400/500)*/ + }; + + clk666_cfg:clk666_cfg { + clk_freq = <666000000>; + clk_parent = "fclk_div3"; + clkp_freq = <666000000>; + voltage = <1150>; + keep_count = <1>; + threshold = <177 250>; + /*187.5=250*(500/666.6)*/ + }; + + clk750_cfg:clk750_cfg { + clk_freq = <744000000>; + clk_parent = "gp0_pll"; + clkp_freq = <744000000>; + voltage = <1150>; + keep_count = <1>; + threshold = <213 255>; + /*223=250*(666.0/744.0), 223+7=230*/ + }; + + clk800_cfg:clk800_cfg { + clk_freq = <792000000>; + clk_parent = "gp0_pll"; + clkp_freq = <792000000>; + voltage = <1150>; + keep_count = <1>; + threshold = <230 255>; + }; + + }; + +};/* end of / */ diff --git a/arch/arm64/boot/dts/mesongxbb.dtsi b/arch/arm64/boot/dts/mesongxbb.dtsi new file mode 100644 index 0000000000000..fe7742c270501 --- /dev/null +++ b/arch/arm64/boot/dts/mesongxbb.dtsi @@ -0,0 +1,825 @@ +#include +#include +#include +#include +#include +#include +#include "mesongxbb-gpu-mali450.dtsi" +/ { + cpus:cpus { + #address-cells = <2>; + #size-cells = <0>; + #cooling-cells = <2>; /* min followed by max */ + + cpu0:cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + }; + + cpu1:cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + }; + cpu2:cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + }; + + cpu3:cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + }; + + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = , + , + , + ; + }; + timer_bc { + compatible = "arm, meson-bc-timer"; + reg= <0x0 0xc1109990 0x0 0x4 0x0 0xc1109994 0x0 0x4>; + timer_name = "Meson TimerF"; + clockevent-rating=<300>; + clockevent-shift=<20>; + clockevent-features=<0x03>; + interrupts = <0 60 1>; + bit_enable=<16>; + bit_mode=<12>; + bit_resolution=<0>; + }; + arm_pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0 137 4>, + <0 138 4>, + <0 153 4>, + <0 154 4>; + }; + meson_suspend:pm{ + compatible = "amlogic, pm"; + device_name = "aml_pm"; + gxbaby-suspend; + reg = <0x0 0xc81000a8 0x0 0x4 + 0x0 0xc810023c 0x0 0x4>; + }; + + gic: interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <3>; + #address-cells = <0>; + interrupt-controller; + reg = <0x0 0xc4301000 0 0x1000>, + <0x0 0xc4302000 0 0x0100>; + interrupts = ; + }; + + aml_restart{ + compatible = "aml, restart"; + sys_reset = <0x84000009>; + sys_poweroff = <0x84000008>; + }; + + + + psci { + compatible = "arm,psci"; + method = "smc"; + cpu_suspend = <0xC4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xC4000003>; + migrate = <0xC4000005>; + }; + secmon { + compatible = "amlogic, secmon"; + memory-region = <&secmon_reserved>; + in_base_func = <0x82000020>; + out_base_func = <0x82000021>; + }; + securitykey { + compatible = "aml, securitykey"; + storage_query = <0x82000060>; + storage_read = <0x82000061>; + storage_write = <0x82000062>; + storage_tell = <0x82000063>; + storage_verify = <0x82000064>; + storage_status = <0x82000065>; + storage_list = <0x82000067>; + storage_remove = <0x82000068>; + storage_in_func = <0x82000023>; + storage_out_func = <0x82000024>; + storage_block_func = <0x82000025>; + storage_size_func = <0x82000027>; + }; + cpu_iomap{ + compatible = "amlogic, iomap"; + #address-cells=<2>; + #size-cells=<2>; + ranges; + io_cbus_base{ + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + io_apb_base{ + reg = <0x0 0xd0000000 0x0 0x200000>; + }; + io_aobus_base{ + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + }; + cpufreq-meson { + compatible = "amlogic, cpufreq-scpi"; + status = "okay"; + clocks = <&scpi_dvfs 0>; + clock-names = "cpu_clk"; + }; + + amlogic-watchdog{ + compatible = "amlogic, gx-wdt"; + status = "disable"; + default_timeout=<10>; + reset_watchdog_method=<1>;//0:sysfs,1:kernel + reset_watchdog_time=<2>; + shutdown_timeout=<10>; + firmware_timeout=<6>; + suspend_timeout=<6>; + reg = <0x0 0xc11098d0 0x0 0x10>; + clocks = <&clock CLK_XTAL>; + }; + amlogic-jtag { + compatible = "amlogic, jtag"; + status = "okay"; + pinctrl-names = "jtag_apao_pins", "jtag_apee_pins"; + pinctrl-0 = <&jtag_apao_pins>; + pinctrl-1 = <&jtag_apee_pins>; + }; + clock: meson_clock { + compatible = "amlogic, gxbb-clock"; + reg = <0x0 0xc883c000 0x0 0x1000>, /* HIU BUS*/ + <0x0 0xc8100000 0x0 0x1000>; //AOBUS + #clock-cells = <1>; + #reset-cells = <1>; + sys_max = <1536000000>; + }; + cpu_info{ + compatible = "amlogic, cpuinfo"; + cpuinfo_cmd = <0x82000044>; + }; + pinmux: pinmux{ + compatible = "amlogic, pinmux-gxbb"; + dev_name = "pinmux"; + #pinmux-cells=<2>; + #address-cells = <2>; + #size-cells = <2>; + reg = <0x0 0xc1109880 0x0 0x10>; + ranges; + gpio: banks@c11080b0 { + reg = <0x0 0xc88344b0 0x0 0x28>, + <0x0 0xc88344e8 0x0 0x14>, + <0x0 0xc8834520 0x0 0x14>, + <0x0 0xc8834430 0x0 0x40>; + reg-names = "mux", "pull", "pull-enable", "gpio"; + gpio-controller; + #gpio-cells = <2>; + }; + gpio_ao: ao-bank@c1108030 { + reg = <0x0 0xc8100014 0x0 0x8>, + <0x0 0xc810002c 0x0 0x4>, + <0x0 0xc8100024 0x0 0x8>; + reg-names = "mux", "pull", "gpio"; + gpio-controller; + #gpio-cells = <2>; + }; + eth_pins:eth_pins{ + amlogic,setmask =<6 0x3fff>; + amlogic,clrmask =<6 0xc000>, + <5 0x3c0000f0>, + <4 0x300>; + amlogic,pins="GPIOZ_0","GPIOZ_1","GPIOZ_2","GPIOZ_3", + "GPIOZ_4","GPIOZ_5","GPIOZ_6","GPIOZ_7", + "GPIOZ_8","GPIOZ_9","GPIOZ_10","GPIOZ_11", + "GPIOZ_12","GPIOZ_13","GPIOZ_15"; + }; + jtag_apao_pins:jtag_apao_pin{ + amlogic,clrmask = ; + amlogic,pins = "GPIOAO_8","GPIOAO_9","GPIOAO_10","GPIOAO_11"; + }; + jtag_apee_pins:jtag_apee_pin{ + amlogic,clrmask = <2 0xcc00>; + amlogic,pins = "CARD_0","CARD_1","CARD_2","CARD_3"; + }; + remote_pins:remote_pin{ + amlogic,setmask = ; + amlogic,pins = "GPIOAO_7"; + }; + ao_uart_pins:ao_uart{ + amlogic,setmask=; + amlogic,pins="GPIOAO_0", "GPIOAO_1"; + }; + ao_b_uart_pins:ao_b_uart{ + amlogic,setmask=; + amlogic,pins="GPIOAO_4", "GPIOAO_5"; + }; + a_uart_pins:a_uart{ + amlogic,setmask=<4 0x3c00>; + amlogic,pins="GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15"; + }; + b_uart_pins:b_uart{ + amlogic,setmask=<2 0x30000000>; + amlogic,pins="GPIODV_24", "GPIODV_25"; + }; + c_uart_pins:c_uart{ + amlogic,setmask=<1 0xc0000>; + amlogic,pins="GPIOY_13", "GPIOY_14"; + }; + wifi_32k_pins:wifi_32k_pins{ + amlogic,setmask=<2 0x40000000>; + amlogic,clrmask=<2 0x400000 + 3 0x8000>; + amlogic,pins="GPIOX_19"; + }; + sd_clk_cmd_pins:sd_clk_cmd_pins{ + amlogic,setmask=<2 0x00000c00>, + ; + amlogic,pins = "CARD_2","CARD_3"; /* CARD_2:CLK, CARD_3:CMD */ + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_all_pins:sd_all_pins{ + amlogic,setmask=<2 0x0000fc00>, + ; + amlogic,pins="CARD_0","CARD_1","CARD_2","CARD_3","CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_1bit_pins:sd_1bit_pins{ + amlogic,setmask=<2 0x00008c00>, + ; + amlogic,pins = "CARD_1","CARD_2","CARD_3"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_clk_cmd_uart_pins:sd_clk_cmd_uart_pins{ + amlogic,setmask=<2 0x00000c00>, + <8 0x00000600>; + amlogic,pins = "CARD_2","CARD_3"; /* CARD_2:CLK, CARD_3:CMD */ + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_1bit_uart_pins:sd_1bit_uart_pins{ + amlogic,setmask=<2 0x00008c00>, + <8 0x00000600>; + amlogic,pins = "CARD_1","CARD_2","CARD_3"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_to_ao_uart_pins:sd_to_ao_uart_pins{ + amlogic,setmask=; + amlogic,clrmask=<8 0x00000600>; + amlogic,pins = "GPIOAO_0","GPIOAO_1"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + ao_to_sd_uart_pins:ao_to_sd_uart_pins{ + amlogic,setmask=<8 0x00000600>; + amlogic,clrmask=, + <2 0x00003000>; + amlogic,pins = "CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + ao_to_sd_jtag_pins:ao_to_sd_jtag_pins{ + amlogic,setmask=<8 0x00000600>; + amlogic,clrmask=<2 0x0000CC00>, + ; + amlogic,pins = "CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_to_ao_jtag_pins:sd_to_ao_jtag_pins{ + amlogic,setmask=; + amlogic,clrmask=<8 0x00000600>, + <2 0x0000CC00>; + amlogic,pins = "GPIOAO_0","GPIOAO_1"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + + emmc_clk_cmd_pins:emmc_clk_cmd_pins{ + amlogic,setmask=<4 0xc00c0000>; + amlogic,pins = "BOOT_8","BOOT_10"; /** BOOT_10:CMD, BOOT_8:CLK */ + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + emmc_all_pins:emmc_all_pins{ + amlogic,setmask=<4 0xc00c0000>; /*sdhc c*/ + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_10"; + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sdio_clk_cmd_pins:sdio_clk_cmd_pins{ + amlogic,setmask=<8 0x00000003>; + amlogic,pins = "GPIOX_4","GPIOX_5"; /** GPIOX_5:CMD, GPIOX_4:CLK */ + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sdio_all_pins:sdio_all_pins{ + amlogic,setmask=<8 0x0000003f>; + amlogic,pins = "GPIOX_0","GPIOX_1","GPIOX_2","GPIOX_3","GPIOX_4","GPIOX_5"; + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + /*cam_gpio_b: cam_gpio_b{ + amlogic,setmask=<5 0xf0>; + amlogic,clrmask=<4 0x300 + 5 0xc000000 + 6 0x1ff3>; + amlogic,pins = "GPIOZ_0","GPIOZ_1","GPIOZ_3","GPIOZ_4","GPIOZ_5","GPIOZ_6","GPIOZ_7","GPIOZ_8","GPIOZ_9","GPIOZ_10","GPIOZ_11"; + }; + cam_gpio_a: cam_gpio_a{ + amlogic,setmask=<2 0x3f0000>; + amlogic,clrmask=<1 0x7030ff + 3 0x37>; + amlogic,pins = "GPIOY_1","GPIOY_0","GPIOY_2","GPIOY_15","GPIOY_16", + "GPIOY_3","GPIOY_4","GPIOY_5","GPIOY_6", + "GPIOY_7","GPIOY_8","GPIOY_9","GPIOY_10"; + };*/ + conf_nand_pulldown: conf_nand_pulldown{ + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_15"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + conf_nand_pullup: conf_nand_pullup{ + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + all_nand_pins: all_nand_pins{ + amlogic,setmask=<4 0x7ff00000>; + amlogic,clrmask=<0 0x80000 + 4 0x800c0000 + 5 0xf>; + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_9", + "BOOT_10","BOOT_11","BOOT_12","BOOT_13", + "BOOT_14","BOOT_15","BOOT_16","BOOT_17"; + amlogic,enable-output=<1>; + }; + nand_cs_pins: nand_cs{ + amlogic,setmask=<4 0xc000000>; + amlogic,clrmask=<4 0x40000>; + amlogic,pins = "BOOT_8","BOOT_9"; + }; + hdmitx_hpd: hdmitx_hpd { + amlogic,setmask=<1 0x04000000>; + amlogic,pins="GPIOH_0"; + }; + hdmitx_ddc: hdmitx_ddc { + amlogic,setmask=<1 0x03000000>; + amlogic,pins="GPIOH_1", "GPIOH_2"; + }; + hdmitx_aocec: hdmitx_aocec { + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_12"; + }; + hdmitx_eecec: hdmitx_eecec { + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_12"; + }; + + /*p200 i2c-A multiplex with usb PWR*/ + a_i2c_master:a_i2c{ + amlogic,setmask=<7 0xc000000>; + amlogic,clrmask=<0 0x18c0 2 0x30000000 5 0x1800>; + amlogic,pins="GPIODV_24","GPIODV_25"; + }; + b_i2c_master:b_i2c{ + amlogic,setmask=<7 0x3000000>; + amlogic,clrmask=<0 0x600 2 0xc000000 5 0x700>; + amlogic,pins="GPIODV_26","GPIODV_27"; + }; + c_i2c_master:c_i2c{ + amlogic,setmask=<7 0xc00000>; + amlogic,clrmask=<3 0x700000>; + amlogic,pins="GPIODV_28","GPIODV_29"; + }; + d_i2c_master:d_i2c{ + amlogic,setmask=<4 0xc>; + amlogic,clrmask=<2 0x3000000 3 0x1000>; + amlogic,pins="GPIOX_16","GPIOX_17"; + }; + i2c_slave_pin:s_i2c{ + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_4","GPIOAO_5"; + }; + dvb_p_ts0_pins: dvb_p_ts0_pins { + amlogic,setmask = <3 0x37>; + amlogic,clrmask = <2 0xf0000 1 0x30ff>; + amlogic,pins = "GPIOY_0","GPIOY_1","GPIOY_2", "GPIOY_3","GPIOY_4","GPIOY_5","GPIOY_6","GPIOY_7","GPIOY_8","GPIOY_9","GPIOY_10"; + }; + dvb_s_ts0_pins: dvb_s_ts0_pins { + amlogic,setmask = <3 0x17>; + amlogic,clrmask = <2 0xf0000 1 0x7>; + amlogic,pins = "GPIOY_0","GPIOY_1","GPIOY_2","GPIOY_3"; + }; + }; + cpu_version{ + reg=<0x0 0xc8100220 0x0 0x4>; + }; + meson_clk_msr{ + compatible = "amlogic, gxbb_measure"; + reg = <0x0 0xc110875c 0x0 0x4 + 0x0 0xc1108764 0x0 0x4>; + }; + + i2c_a: i2c@c1108500{ /*I2C-A*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-A"; + status = "disabled"; + reg = <0x0 0xc1108500 0x0 0x20>; + device_id = <1>; + pinctrl-names="default"; + pinctrl-0=<&a_i2c_master>;/*p200 i2c-A multiplex with usb PWR*/ + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_b: i2c@c11087c0{ /*I2C-B*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-B"; + status = "disabled"; + reg = <0x0 0xc11087c0 0x0 0x20>; + device_id = <2>; + pinctrl-names="default"; + pinctrl-0=<&b_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_c: i2c@c11087e0{ /*I2C-C*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-C"; + status = "disabled"; + reg = <0x0 0xc11087e0 0x0 0x20>; + device_id = <3>; + pinctrl-names="default"; + pinctrl-0=<&c_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_d: i2c@c1108d20{ /*I2C-D*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-D"; + status = "disabled"; + reg = <0x0 0xc1108d20 0x0 0x20>; + device_id = <4>; + pinctrl-names="default"; + pinctrl-0=<&d_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_slave:i2c_slave@c8100540{ + compatible = "amlogic, meson-i2c-slave"; + status = "disabled"; + reg = <0x0 0xc8100540 0x0 0x20>; + interrupts = <0 194 1>; + pinctrl-names="default"; + pinctrl-0=<&i2c_slave_pin>; + + }; + efuse: efuse{ + compatible = "amlogic, efuse"; + read_cmd = <0x82000030>; + write_cmd = <0x82000031>; + get_max_cmd = <0x82000033>; + key = <&efusekey>; + resets = <&clock GCLK_IDX_EFUSE>; + reset-names = "efuse_clk"; + status = "disabled"; + }; + efusekey:efusekey{ + keynum = <4>; + key0 = <&key0>; + key1 = <&key1>; + key2 = <&key2>; + key3 = <&key3>; + key0:key0{ + keyname = "mac"; + offset = <0>; + size = <6>; + }; + key1:key1{ + keyname = "mac_bt"; + offset = <6>; + size = <6>; + }; + key2:key2{ + keyname = "mac_wifi"; + offset = <12>; + size = <6>; + }; + key3:key3{ + keyname = "usid"; + offset = <18>; + size = <16>; + }; + }; + + mailbox: mhu@c883c400 { + compatible = "amlogic, meson_mhu"; + reg = <0x0 0xc883c400 0x0 0x4c>, /* MHU registers */ + <0x0 0xc8013000 0x0 0x800>; /* Payload area */ + interrupts = <0 209 IRQ_TYPE_EDGE_RISING>, /* low priority interrupt */ + <0 210 IRQ_TYPE_EDGE_RISING>; /* high priority interrupt */ + #mbox-cells = <1>; + mbox-names = "cpu_to_scp_low", "cpu_to_scp_high"; + mboxes = <&mailbox 0 &mailbox 1>; + }; + scpi_clocks { + compatible = "arm,scpi-clks"; + + scpi_dvfs: scpi_clocks@0 { + compatible = "arm,scpi-clk-indexed"; + #clock-cells = <1>; + clock-indices = <0>; + clock-output-names = "vcpu"; + }; + + }; + aml_remote:meson-remote { + compatible = "amlogic, aml_remote"; + dev_name = "meson-remote"; + status = "ok"; + remote_ao_offset = <0x580>; /* 0x400 + (0x20 + idx)<<2 -- old ; 0x400 + (0x60 +idx)<<2 --new */ + interrupts = <0 196 1>; + pinctrl-names = "default"; + pinctrl-0 = <&remote_pins>; + }; + meson_ir:meson-ir { + compatible = "amlogic,meson-gxbb-ir"; + status = "disabled"; + reg = <0x0 0xc8100580 0x0 0x40>; + interrupts = <0 196 1>; + pinctrl-names = "default"; + pinctrl-0 = <&remote_pins>; + }; + + rng { + compatible = "amlogic,meson-rng"; + reg = <0x0 0xc8834000 0x0 0x4>; + }; + + audio_data:audio_data { + compatible = "amlogic, audio_data"; + query_licence_cmd = <0x82000050>; + status = "disabled"; + }; + + saradc: saradc { + compatible = "amlogic, saradc"; + status = "okay"; + interrupts = <0 9 1>; + interrupt-names = "saradc_int"; + clocks = <&clock CLK_XTAL>; + clock-names = "saradc_clk"; + resets = <&clock GCLK_IDX_SARADC>; + reg = <0x0 0xc1108680 0x0 0x30 + 0x0 0xc883c3d8 0x0 0x08>; + }; + + defendkey: defendkey { + compatible = "amlogic, defendkey"; + reg = <0x0 0xc8834500 0x0 0x4>; /*RAND64_ADDR0*/ + mem_size = <0x0 0x100000>; + status = "disabled"; + }; + + tpiu@0,c0202000 { + compatible = "arm,coresight-tpiu", "arm,primecell"; + reg = <0 0xc0202000 0 0x1000>; + + clocks = <&clock CLK_APB_P>; + clock-names = "apb_pclk"; + port { + tpiu_in_port: endpoint@0 { + slave-mode; + remote-endpoint = <&replicator_out_port0>; + }; + }; + }; + + etb@0,c0203000 { + compatible = "arm,coresight-etb10", "arm,primecell"; + reg = <0 0xc0203000 0 0x1000>; + + clocks = <&clock CLK_APB_P>; + clock-names = "apb_pclk"; + port { + etb_in_port: endpoint@0 { + slave-mode; + remote-endpoint = <&replicator_out_port1>; + }; + }; + }; + + replicator@0,c0204000 { + compatible = "arm,coresight-replicator-qcom", "arm,primecell"; + reg = <0 0xc0204000 0 0x1000>; + + clocks = <&clock CLK_APB_P>; + clock-names = "apb_pclk"; + ports { + #address-cells = <1>; + #size-cells = <0>; + + /* replicator output ports */ + port@0 { + #address-cells = <1>; + #size-cells = <0>; + reg = <0>; + replicator_out_port0: endpoint { + reg = <0>; + remote-endpoint = <&tpiu_in_port>; + }; + }; + + port@1 { + #address-cells = <1>; + #size-cells = <0>; + reg = <1>; + replicator_out_port1: endpoint { + reg = <1>; + remote-endpoint = <&etb_in_port>; + }; + }; + + /* replicator input port */ + port@2 { + reg = <0>; + replicator_in_port0: endpoint { + slave-mode; + remote-endpoint = <&funnel_out_port0>; + }; + }; + }; + }; + + funnel@0,c0201000 { + compatible = "arm,coresight-funnel", "arm,primecell"; + reg = <0 0xc0201000 0 0x1000>; + + clocks = <&clock CLK_APB_P>; + clock-names = "apb_pclk"; + ports { + #address-cells = <1>; + #size-cells = <0>; + + /* funnel output port */ + port@0 { + reg = <0>; + funnel_out_port0: endpoint { + remote-endpoint = <&replicator_in_port0>; + }; + }; + + /* funnel input ports */ + port@1 { + reg = <0>; + funnel_in_port0: endpoint { + slave-mode; + remote-endpoint = <&etm0_out_port>; + }; + }; + + port@2 { + reg = <1>; + funnel_in_port1: endpoint { + slave-mode; + remote-endpoint = <&etm1_out_port>; + }; + }; + + port@3 { + reg = <2>; + funnel_in_port2: endpoint { + slave-mode; + remote-endpoint = <&etm2_out_port>; + }; + }; + + port@4 { + reg = <3>; + funnel_in_port3: endpoint { + slave-mode; + remote-endpoint = <&etm3_out_port>; + }; + }; + }; + }; + + etm@0,c0440000 { + compatible = "arm,coresight-etm4x", "arm,primecell"; + reg = <0 0xc0440000 0 0x1000>; + + cpu = <&cpu0>; + clocks = <&clock CLK_APB_P>; + clock-names = "apb_pclk"; + port { + etm0_out_port: endpoint { + remote-endpoint = <&funnel_in_port0>; + }; + }; + }; + + etm@0,c0540000 { + compatible = "arm,coresight-etm4x", "arm,primecell"; + reg = <0 0xc0540000 0 0x1000>; + + cpu = <&cpu1>; + clocks = <&clock CLK_APB_P>; + clock-names = "apb_pclk"; + port { + etm1_out_port: endpoint { + remote-endpoint = <&funnel_in_port1>; + }; + }; + }; + + etm@0,c0640000 { + compatible = "arm,coresight-etm4x", "arm,primecell"; + reg = <0 0xc0640000 0 0x1000>; + + cpu = <&cpu2>; + clocks = <&clock CLK_APB_P>; + clock-names = "apb_pclk"; + port { + etm2_out_port: endpoint { + remote-endpoint = <&funnel_in_port2>; + }; + }; + }; + + etm@0,c0740000 { + compatible = "arm,coresight-etm4x", "arm,primecell"; + reg = <0 0xc0740000 0 0x1000>; + + cpu = <&cpu3>; + clocks = <&clock CLK_APB_P>; + clock-names = "apb_pclk"; + port { + etm3_out_port: endpoint { + remote-endpoint = <&funnel_in_port3>; + }; + }; + }; + + +};/* end of / */ diff --git a/arch/arm64/boot/dts/mesongxl.dtsi b/arch/arm64/boot/dts/mesongxl.dtsi new file mode 100644 index 0000000000000..b243af2d057de --- /dev/null +++ b/arch/arm64/boot/dts/mesongxl.dtsi @@ -0,0 +1,726 @@ +/* + * arch/arm64/boot/dts/amlogic/mesongxl.dtsi + * + * Copyright (C) 2015 Amlogic, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * +*/ + +#include +#include +#include +#include +#include +#include +#include "mesongxbb-gpu-mali450.dtsi" +/ { + cpus:cpus { + #address-cells = <2>; + #size-cells = <0>; + #cooling-cells = <2>; /* min followed by max */ + + cpu0:cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + /*cpu-idle-states = <&CPU_SLEEP_0>;*/ + }; + + cpu1:cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + /*cpu-idle-states = <&CPU_SLEEP_0>;*/ + }; + cpu2:cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + /*cpu-idle-states = <&CPU_SLEEP_0>;*/ + }; + + cpu3:cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + /*cpu-idle-states = <&CPU_SLEEP_0>;*/ + }; + +/* + idle-states { + entry-method = "arm,psci"; + CPU_SLEEP_0: cpu-sleep-0 { + compatible = "arm, idle-state"; + arm,psci-suspend-param = <0x0010000>; + local-timer-stop; + entry-latency-us = <3000>; + exit-latency-us = <3000>; + min-residency-us = <8000>; + }; + }; +*/ + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = , + , + , + ; + }; + timer_bc { + compatible = "arm, meson-bc-timer"; + reg= <0x0 0xc1109990 0x0 0x4 0x0 0xc1109994 0x0 0x4>; + timer_name = "Meson TimerF"; + clockevent-rating=<300>; + clockevent-shift=<20>; + clockevent-features=<0x23>; + interrupts = <0 60 1>; + bit_enable=<16>; + bit_mode=<12>; + bit_resolution=<0>; + }; + arm_pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0 137 4>, + <0 138 4>, + <0 153 4>, + <0 154 4>; + }; + meson_suspend:pm{ + compatible = "amlogic, pm"; + device_name = "aml_pm"; + gxbaby-suspend; + reg = <0x0 0xc81000a8 0x0 0x4 + 0x0 0xc810023c 0x0 0x4>; + }; + + gic: interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <3>; + #address-cells = <0>; + interrupt-controller; + reg = <0x0 0xc4301000 0 0x1000>, + <0x0 0xc4302000 0 0x0100>; + interrupts = ; + }; + + aml_restart{ + compatible = "aml, restart"; + sys_reset = <0x84000009>; + sys_poweroff = <0x84000008>; + }; + + + + psci { + compatible = "arm,psci"; + method = "smc"; + cpu_suspend = <0xC4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xC4000003>; + migrate = <0xC4000005>; + }; + secmon { + compatible = "amlogic, secmon"; + memory-region = <&secmon_reserved>; + in_base_func = <0x82000020>; + out_base_func = <0x82000021>; + }; + securitykey { + compatible = "aml, securitykey"; + storage_query = <0x82000060>; + storage_read = <0x82000061>; + storage_write = <0x82000062>; + storage_tell = <0x82000063>; + storage_verify = <0x82000064>; + storage_status = <0x82000065>; + storage_list = <0x82000067>; + storage_remove = <0x82000068>; + storage_in_func = <0x82000023>; + storage_out_func = <0x82000024>; + storage_block_func = <0x82000025>; + storage_size_func = <0x82000027>; + }; + cpu_iomap{ + compatible = "amlogic, iomap"; + #address-cells=<2>; + #size-cells=<2>; + ranges; + io_cbus_base{ + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + io_apb_base{ + reg = <0x0 0xd0000000 0x0 0x200000>; + }; + io_aobus_base{ + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + }; + cpufreq-meson { + compatible = "amlogic, cpufreq-scpi"; + status = "okay"; + clocks = <&scpi_dvfs 0>; + clock-names = "cpu_clk"; + }; + + amlogic-watchdog{ + compatible = "amlogic, gx-wdt"; + status = "disable"; + default_timeout=<10>; + reset_watchdog_method=<1>;//0:sysfs,1:kernel + reset_watchdog_time=<2>; + shutdown_timeout=<10>; + firmware_timeout=<6>; + suspend_timeout=<6>; + reg = <0x0 0xc11098d0 0x0 0x10>; + clocks = <&clock CLK_XTAL>; + }; + amlogic-jtag { + compatible = "amlogic, jtag"; + status = "okay"; + pinctrl-names = "jtag_apao_pins", "jtag_apee_pins"; + pinctrl-0 = <&jtag_apao_pins>; + pinctrl-1 = <&jtag_apee_pins>; + }; + clock: meson_clock { + compatible = "amlogic, gxl-clock"; + reg = <0x0 0xc883c000 0x0 0x1000>, /* HIU BUS*/ + <0x0 0xc8100000 0x0 0x1000>; //AOBUS + #clock-cells = <1>; + #reset-cells = <1>; + sys_max = <1536000000>; + }; + cpu_info{ + compatible = "amlogic, cpuinfo"; + cpuinfo_cmd = <0x82000044>; + }; + pinmux: pinmux{ + compatible = "amlogic, pinmux-gxl"; + dev_name = "pinmux"; + #pinmux-cells=<2>; + #address-cells = <2>; + #size-cells = <2>; + reg = <0x0 0xc1109880 0x0 0x10>; + ranges; + gpio: banks@c11080b0 { + reg = <0x0 0xc88344b0 0x0 0x28>, + <0x0 0xc88344e8 0x0 0x14>, + <0x0 0xc8834520 0x0 0x14>, + <0x0 0xc8834430 0x0 0x40>; + reg-names = "mux", "pull", "pull-enable", "gpio"; + gpio-controller; + #gpio-cells = <2>; + }; + gpio_ao: ao-bank@c1108030 { + reg = <0x0 0xc8100014 0x0 0x8>, + <0x0 0xc810002c 0x0 0x4>, + <0x0 0xc8100024 0x0 0x8>; + reg-names = "mux", "pull", "gpio"; + gpio-controller; + #gpio-cells = <2>; + }; + external_eth_pins:external_eth_pins{ + amlogic,setmask =<4 0xfffc00>; + amlogic,clrmask =<4 0x3fc>, + <3 0xffcff800>; + amlogic,pins="GPIOZ_0","GPIOZ_1","GPIOZ_2","GPIOZ_3", + "GPIOZ_4","GPIOZ_5","GPIOZ_6","GPIOZ_7", + "GPIOZ_8","GPIOZ_9","GPIOZ_10","GPIOZ_11", + "GPIOZ_12","GPIOZ_13"; + }; + internal_eth_pins:internal_eth_pins{ + amlogic,setmask =<4 0x3000000>; + amlogic,clrmask =<3 0x300000>; + amlogic,pins="GPIOZ_14","GPIOZ_15"; + }; + jtag_apao_pins:jtag_apao_pin{ + amlogic,clrmask = <6 0x7fe0000>; + amlogic,pins = "GPIOH_6","GPIOH_7","GPIOH_8","GPIOH_9"; + }; + jtag_apee_pins:jtag_apee_pin{ + amlogic,clrmask = <6 0x3c>; + amlogic,pins = "CARD_0","CARD_1","CARD_2","CARD_3"; + }; + remote_pins:remote_pin{ + amlogic,setmask = ; + amlogic,pins = "GPIOAO_7"; + }; + ao_uart_pins:ao_uart{ + amlogic,setmask=; + amlogic,pins="GPIOAO_0", "GPIOAO_1"; + }; + ao_b_uart_pins:ao_b_uart{ + amlogic,setmask=; + amlogic,pins="GPIOAO_4", "GPIOAO_5"; + }; + a_uart_pins:a_uart{ + amlogic,setmask=<5 0xf0000>; + amlogic,clrmask=<5 0x3c0>; + amlogic,pins="GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15"; + }; + b_uart_pins:b_uart{ + amlogic,setmask=<2 0x18000>; + amlogic,pins="GPIODV_24", "GPIODV_25"; + }; + c_uart_pins:c_uart{ + amlogic,setmask=<5 0x3000>; + amlogic,pins="GPIOX_8", "GPIOX_9"; + }; + wifi_32k_pins:wifi_32k_pins{ + amlogic,setmask=<5 0x8000>; + amlogic,pins="GPIOX_16"; + }; + sd_clk_cmd_pins:sd_clk_cmd_pins{ + amlogic,setmask=<6 0x0000000c>, + ; + amlogic,pins = "CARD_2","CARD_3"; /* CARD_2:CLK, CARD_3:CMD */ + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_all_pins:sd_all_pins{ + amlogic,setmask=<6 0x0000003f>, + ; + amlogic,clrmask=<6 0x00000fc0>; + amlogic,pins="CARD_0","CARD_1","CARD_2","CARD_3","CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_1bit_pins:sd_1bit_pins{ + amlogic,setmask=<6 0x0000001c>, + ; + amlogic,clrmask=<6 0x00000cc3>; + amlogic,pins = "CARD_1","CARD_2","CARD_3"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_clk_cmd_uart_pins:sd_clk_cmd_uart_pins{ + amlogic,setmask=<6 0x0000030c>; + amlogic,clrmask=<6 0x00000cc3>, + ; + amlogic,pins = "CARD_2","CARD_3"; /* CARD_2:CLK, CARD_3:CMD */ + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_1bit_uart_pins:sd_1bit_uart_pins{ + amlogic,setmask=<6 0x0000031c>; + amlogic,clrmask=<6 0x00000cc3>, + ; + amlogic,pins = "CARD_1","CARD_2","CARD_3"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_to_ao_uart_pins:sd_to_ao_uart_pins{ + amlogic,setmask=; + amlogic,clrmask=<6 0x00000300>; + amlogic,pins = "GPIOAO_0","GPIOAO_1"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + ao_to_sd_uart_pins:ao_to_sd_uart_pins{ + amlogic,setmask=<6 0x00000300>; + amlogic,clrmask=, + <6 0x00000cc3>; + amlogic,pins = "CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + ao_to_sd_jtag_pins:ao_to_sd_jtag_pins{ + amlogic,setmask=<6 0x00000300>; + amlogic,clrmask=<6 0x00000cff>, + ; + amlogic,pins = "CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_to_ao_jtag_pins:sd_to_ao_jtag_pins{ + amlogic,setmask=; + amlogic,clrmask=<6 0x00000fc0>; + amlogic,pins = "GPIOAO_0","GPIOAO_1"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + + emmc_clk_cmd_pins:emmc_clk_cmd_pins{ + amlogic,setmask=<7 0x60000000>; + amlogic,clrmask=<7 0x000000e0>; + amlogic,pins = "BOOT_8","BOOT_10"; /** BOOT_10:CMD, BOOT_8:CLK */ + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + emmc_conf_pull_up:emmc_conf_pull_up{ + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_10"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + emmc_conf_pull_done:emmc_conf_pull_done{ + amlogic,pins = "BOOT_15"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + + emmc_all_pins:emmc_all_pins{ + amlogic,setmask=<7 0xf0000000>; /*sdhc c*/ + amlogic,clrmask=<7 0x000000e0>; + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_10","BOOT_15"; + amlogic,enable-output=<1>; /** 0:output, 1:input */ + }; + sdio_clk_cmd_pins:sdio_clk_cmd_pins{ + amlogic,setmask=<5 0x0c000000>; + amlogic,pins = "GPIOX_4","GPIOX_5"; /** GPIOX_5:CMD, GPIOX_4:CLK */ + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sdio_all_pins:sdio_all_pins{ + amlogic,setmask=<5 0xfc000000>; + amlogic,pins = "GPIOX_0","GPIOX_1","GPIOX_2","GPIOX_3","GPIOX_4","GPIOX_5"; + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + /*cam_gpio_b: cam_gpio_b{ + amlogic,setmask=<5 0xf0>; + amlogic,clrmask=<4 0x300 + 5 0xc000000 + 6 0x1ff3>; + amlogic,pins = "GPIOZ_0","GPIOZ_1","GPIOZ_3","GPIOZ_4","GPIOZ_5","GPIOZ_6","GPIOZ_7","GPIOZ_8","GPIOZ_9","GPIOZ_10","GPIOZ_11"; + }; + */ + conf_nand_pulldown: conf_nand_pulldown{ + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_15"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + conf_nand_pullup: conf_nand_pullup{ + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + all_nand_pins: all_nand_pins{ + amlogic,setmask=<7 0x800000ff>; + amlogic,clrmask=<7 0x70ffbc00>; + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_9", + "BOOT_10","BOOT_11","BOOT_12","BOOT_13", + "BOOT_14","BOOT_15"; + amlogic,enable-output=<1>; + }; + nand_cs_pins: nand_cs{ + amlogic,setmask=<7 0xc0>; + amlogic,clrmask=<7 0x40040000>; + amlogic,pins = "BOOT_8","BOOT_9"; + }; + hdmitx_hpd: hdmitx_hpd { + amlogic,setmask=<6 0x80000000>; + amlogic,pins="GPIOH_0"; + }; + hdmitx_ddc: hdmitx_ddc { + amlogic,setmask=<6 0x30000000>; + amlogic,pins="GPIOH_1", "GPIOH_2"; + }; + hdmitx_aocec: hdmitx_aocec { + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_8"; + }; + hdmitx_eecec: hdmitx_eecec { + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_8"; + }; + + /*p200 i2c-A multiplex with usb PWR*/ + a_i2c_master:a_i2c{ + amlogic,setmask=<1 0xc000>; + amlogic,clrmask=<3 0x18 2 0x18000 2 0xc0 1 0x600000>; + amlogic,pins="GPIODV_24","GPIODV_25"; + }; + b_i2c_master:b_i2c{ + amlogic,setmask=<1 0x3000>; + amlogic,clrmask=<2 0x6000 1 0x1c0000>; + amlogic,pins="GPIODV_26","GPIODV_27"; + }; + c_i2c_master:c_i2c{ + amlogic,setmask=<1 0xc00>; + amlogic,clrmask=<2 0x1800 1 0x200 2 0x20>; + amlogic,pins="GPIODV_28","GPIODV_29"; + }; + d_i2c_master:d_i2c{ + amlogic,setmask=<5 0x30>; + amlogic,clrmask=<5 0x300c03>; + amlogic,pins="GPIOX_10","GPIOX_11"; + }; + + spicc_pins_z11z12z13: spicc_pins_z11z12z13{ + amlogic,setmask=<4 0x1c>; + amlogic,clrmask=<3 0x800 4 0x1c00>; + amlogic,pins="GPIOZ_11","GPIOZ_12","GPIOZ_13"; + }; + spicc_pulldown_z11z12z13: spicc_pulldown_z11z12z13{ + amlogic,pins="GPIOZ_11","GPIOZ_12","GPIOZ_13"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + spicc_pullup_z11z12z13: spicc_pullup_z11z12z13{ + amlogic,pins="GPIOZ_11","GPIOZ_12","GPIOZ_13"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + spicc_pins_x8x9x11: spicc_pins_x8x9x11{ + amlogic,setmask=<5 0xd>; + amlogic,clrmask=<5 0xd03430 6 0xd>; + amlogic,pins="GPIOX_8","GPIOX_9","GPIOX_11"; + }; + spicc_pulldown_x8x9x11: spicc_pulldown_x8x9x11{ + amlogic,pins = "GPIOX_8","GPIOX_9","GPIOX_11"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + spicc_pullup_x8x9x11: spicc_pullup_x8x9x11{ + amlogic,pins = "GPIOX_8","GPIOX_9","GPIOX_11"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + }; + cpu_version{ + reg=<0x0 0xc8100220 0x0 0x4>; + }; + meson_clk_msr{ + compatible = "amlogic, gxl_measure"; + reg = <0x0 0xc110875c 0x0 0x4 + 0x0 0xc1108764 0x0 0x4>; + }; + + i2c_a: i2c@c1108500{ /*I2C-A*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-A"; + status = "disabled"; + reg = <0x0 0xc1108500 0x0 0x20>; + device_id = <1>; + pinctrl-names="default"; + pinctrl-0=<&a_i2c_master>;/*p200 i2c-A multiplex with usb PWR*/ + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_b: i2c@c11087c0{ /*I2C-B*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-B"; + status = "disabled"; + reg = <0x0 0xc11087c0 0x0 0x20>; + device_id = <2>; + pinctrl-names="default"; + pinctrl-0=<&b_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_c: i2c@c11087e0{ /*I2C-C*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-C"; + status = "disabled"; + reg = <0x0 0xc11087e0 0x0 0x20>; + device_id = <3>; + pinctrl-names="default"; + pinctrl-0=<&c_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_d: i2c@c1108d20{ /*I2C-D*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-D"; + status = "disabled"; + reg = <0x0 0xc1108d20 0x0 0x20>; + device_id = <4>; + pinctrl-names="default"; + pinctrl-0=<&d_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + efuse: efuse{ + compatible = "amlogic, efuse"; + read_cmd = <0x82000030>; + write_cmd = <0x82000031>; + get_max_cmd = <0x82000033>; + key = <&efusekey>; + resets = <&clock GCLK_IDX_EFUSE>; + reset-names = "efuse_clk"; + status = "disabled"; + }; + efusekey:efusekey{ + keynum = <4>; + key0 = <&key0>; + key1 = <&key1>; + key2 = <&key2>; + key3 = <&key3>; + key0:key0{ + keyname = "mac"; + offset = <0>; + size = <6>; + }; + key1:key1{ + keyname = "mac_bt"; + offset = <6>; + size = <6>; + }; + key2:key2{ + keyname = "mac_wifi"; + offset = <12>; + size = <6>; + }; + key3:key3{ + keyname = "usid"; + offset = <18>; + size = <16>; + }; + }; + + mailbox: mhu@c883c400 { + compatible = "amlogic, meson_mhu"; + reg = <0x0 0xc883c400 0x0 0x4c>, /* MHU registers */ + <0x0 0xc8013000 0x0 0x800>; /* Payload area */ + interrupts = <0 209 8>, /* low priority interrupt */ + <0 210 8>; /* high priority interrupt */ + #mbox-cells = <1>; + mbox-names = "cpu_to_scp_low", "cpu_to_scp_high"; + mboxes = <&mailbox 0 &mailbox 1>; + }; + scpi_clocks { + compatible = "arm,scpi-clks"; + + scpi_dvfs: scpi_clocks@0 { + compatible = "arm,scpi-clk-indexed"; + #clock-cells = <1>; + clock-indices = <0>; + clock-output-names = "vcpu"; + }; + + }; + meson-remote { + compatible = "amlogic, aml_remote"; + dev_name = "meson-remote"; + status = "okay"; + remote_ao_offset = <0x580>; /* 0x400 + (0x20 + idx)<<2 -- old ; 0x400 + (0x60 +idx)<<2 --new */ + interrupts = <0 196 1>; + pinctrl-names = "default"; + pinctrl-0 = <&remote_pins>; + }; + + rng { + compatible = "amlogic,meson-rng"; + reg = <0x0 0xc8834000 0x0 0x4>; + }; + + audio_data:audio_data { + compatible = "amlogic, audio_data"; + query_licence_cmd = <0x82000050>; + status = "disabled"; + }; + + saradc: saradc { + compatible = "amlogic, saradc"; + status = "okay"; + interrupts = <0 9 1>; + interrupt-names = "saradc_int"; + clocks = <&clock CLK_XTAL>; + clock-names = "saradc_clk"; + resets = <&clock GCLK_IDX_SARADC>; + reg = <0x0 0xc1108680 0x0 0x30 + 0x0 0xc883c3d8 0x0 0x08>; + }; + + defendkey: defendkey { + compatible = "amlogic, defendkey"; + reg = <0x0 0xc8834500 0x0 0x4>; /*RAND64_ADDR0*/ + mem_size = <0x0 0x100000>; + status = "disabled"; + }; + + spicc:spicc{ + compatible = "amlogic, spicc"; + status = "disabled"; + reg = <0x0 0xc1108d80 0x0 0x28>; + resets = <&clock GCLK_IDX_SPICC>; + clocks = <&clock CLK_81>; + clock-names = "spicc_clk"; + interrupts = <0 81 1>; + device_id = <0>; + }; + aml_aes{ + compatible = "amlogic,aes_dma"; + dev_name = "aml_aes_dma"; + interrupts = <0 188 1 + 0 189 1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + aml_tdes{ + compatible = "amlogic,des_dma,tdes_dma"; + dev_name = "aml_tdes_dma"; + interrupts = <0 188 1 + 0 189 1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + aml_sha{ + compatible = "amlogic,sha_dma"; + dev_name = "aml_sha_dma"; + interrupts = <0 188 1 + 0 189 1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + +};/* end of / */ + +&gpu{ +/*gpu max freq is 750M*/ + tbl = <&clk125_cfg &clk285_cfg &clk400_cfg &clk500_cfg &clk666_cfg &clk750_cfg &clk750_cfg>; +}; diff --git a/arch/arm64/boot/dts/mesongxm-gpu-t82x.dtsi b/arch/arm64/boot/dts/mesongxm-gpu-t82x.dtsi new file mode 100644 index 0000000000000..34469fa74ee2c --- /dev/null +++ b/arch/arm64/boot/dts/mesongxm-gpu-t82x.dtsi @@ -0,0 +1,208 @@ +/* + * Amlogic GXTVBB Platform gpu + * + * Copyright (c) 2015-2015 Amlogic Ltd + * + * This file is licensed under a dual GPLv2 or BSD license. + * + */ + +/ { + t82x_gpu:t82x@d00c0000{ + compatible = "arm,malit602", "arm,malit60x", "arm,malit6xx", "arm,mali-midgard"; + #cooling-cells = <2>; /* min followed by max */ + reg = <0 0xd00c0000 0 0x100000>, + <0 0xc1104440 0 0x001000>, + <0 0xc8100000 0 0x001000>, + <0 0xc883c000 0 0x001000>, /*hiubus base address for gpu clk cntl*/ + <0 0xc1104440 0 0x001000>; + interrupt-parent = <&gic>; + interrupts = <0 160 4>, <0 161 4>, <0 162 4>; + interrupt-names = "GPU", "MMU", "JOB"; + num_of_pp = <3>; + sc_mpp = <1>;/* number of shader cores used most of time.*/ + /*mali-supply = <&vdd_mali>;*/ + operating-points = < + /* KHz uV */ + 666666 1000000 + 500000 1000000 + 400000 1000000 + 285714 1000000 + 250000 1000000 + 125000 1000000 + >; + + tbl = <&dvfs125_cfg &dvfs285_cfg &dvfs400_cfg &dvfs500_cfg &dvfs666_cfg>; + + /*clocks = <&gpu_clk>; + clock-names = "clk_mali";*/ + clocks = <&clock CLK_FPLL_DIV3>, + <&clock CLK_FPLL_DIV4>, + <&clock CLK_FPLL_DIV5>, + <&clock CLK_FPLL_DIV7>, + <&clock GP0_PLL>, + <&clock CLK_MALI>, + <&clock CLK_MALI_0>, + <&clock CLK_MALI_1>; + clock-names = + "fclk_div3", + "fclk_div4", + "fclk_div5", + "fclk_div7", + "gp0_pll", + "clk_gpu", + "clk_gpu_0", + "clk_gpu_1"; + + dvfs125_cfg:clk125_cfg { + clk_freq = <125000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <30 120>; + }; + + dvfs250_cfg:dvfs250_cfg { + clk_freq = <250000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <80 170>; + }; + + dvfs285_cfg:dvfs285_cfg { + clk_freq = <285714000>; + clk_parent = "fclk_div7"; + clkp_freq = <285714000>; + voltage = <1150>; + keep_count = <5>; + threshold = <100 190>; + }; + + dvfs400_cfg:dvfs400_cfg { + clk_freq = <400000000>; + clk_parent = "fclk_div5"; + clkp_freq = <400000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <152 207>; + }; + + dvfs500_cfg:dvfs500_cfg { + clk_freq = <500000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <180 220>; + }; + + dvfs666_cfg:dvfs666_cfg { + clk_freq = <666000000>; + clk_parent = "fclk_div3"; + clkp_freq = <666000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <210 236>; + }; + + dvfs800_cfg:dvfs800_cfg { + clk_freq = <792000000>; + clk_parent = "gp0_pll"; + clkp_freq = <792000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <230 255>; + }; + }; + + gpu_clk:gpu_clk@c883c00 { + compatible = "meson, gpu-clkgen-1.00.a"; + #clock-cells = <0>; + reg = <0 0xc883c000 0 0x001000>; + clocks = <&clock CLK_FPLL_DIV3>, + <&clock CLK_FPLL_DIV4>, + <&clock CLK_FPLL_DIV5>, + <&clock CLK_FPLL_DIV7>, + <&clock GP0_PLL>, + <&clock CLK_GPU>, + <&clock CLK_GPU_0>, + <&clock CLK_GPU_1>; + clock-names = + "fclk_div3", + "fclk_div4", + "fclk_div5", + "fclk_div7", + "gp0_pll", + "clk_gpu", + "clk_gpu_0", + "clk_gpu_1"; + clock-output-names = "clk_mali"; + tbl = <&t82x_clk125_cfg &t82x_clk250_cfg &t82x_clk285_cfg &t82x_clk400_cfg &t82x_clk500_cfg &t82x_clk666_cfg>; + t82x_clk125_cfg:clk125_cfg { + clk_freq = <125000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <30 120>; + }; + + t82x_clk250_cfg:clk250_cfg { + clk_freq = <250000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <80 170>; + }; + + t82x_clk285_cfg:clk285_cfg { + clk_freq = <285714000>; + clk_parent = "fclk_div7"; + clkp_freq = <285714000>; + voltage = <1150>; + keep_count = <5>; + threshold = <100 190>; + }; + + t82x_clk400_cfg:clk400_cfg { + clk_freq = <400000000>; + clk_parent = "fclk_div5"; + clkp_freq = <400000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <152 207>; + }; + + t82x_clk500_cfg:clk500_cfg { + clk_freq = <500000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <180 220>; + }; + + t82x_clk666_cfg:clk666_cfg { + clk_freq = <666666000>; + clk_parent = "fclk_div3"; + clkp_freq = <666666000>; + voltage = <1150>; + keep_count = <5>; + threshold = <210 236>; + }; + + t82x_clk720_cfg:clk720_cfg { + clk_freq = <720000000>; + clk_parent = "gp0_pll"; + clkp_freq = <720000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <230 255>; + }; + }; + +};/* end of / */ diff --git a/arch/arm64/boot/dts/mesongxm.dtsi b/arch/arm64/boot/dts/mesongxm.dtsi new file mode 100644 index 0000000000000..54cc6abb4bca8 --- /dev/null +++ b/arch/arm64/boot/dts/mesongxm.dtsi @@ -0,0 +1,805 @@ +/* + * arch/arm64/boot/dts/amlogic/mesongxm.dtsi + * + * Copyright (C) 2015 Amlogic, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * +*/ + +#include +#include +#include +#include +#include +#include +#include "mesongxm-gpu-t82x.dtsi" +/ { + cpus:cpus { + #address-cells = <2>; + #size-cells = <0>; + + cpu-map { + cluster0:cluster0 { + #cooling-cells = <2>; /* min followed by max */ + core0 { + cpu = <&CPU0>; + }; + core1 { + cpu = <&CPU1>; + }; + core2 { + cpu = <&CPU2>; + }; + core3 { + cpu = <&CPU3>; + }; + }; + cluster1:cluster1 { + #cooling-cells = <2>; /* min followed by max */ + core0 { + cpu = <&CPU4>; + }; + core1 { + cpu = <&CPU5>; + }; + core2 { + cpu = <&CPU6>; + }; + core3 { + cpu = <&CPU7>; + }; + }; + }; + CPU0:cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + clocks = <&scpi_dvfs 0>; + clock-names = "cpu-cluster.0"; + /*cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;*/ + }; + + CPU1:cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + clocks = <&scpi_dvfs 0>; + clock-names = "cpu-cluster.0"; + /*cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;*/ + }; + CPU2:cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + clocks = <&scpi_dvfs 0>; + clock-names = "cpu-cluster.0"; + /*cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;*/ + }; + + CPU3:cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + clocks = <&scpi_dvfs 0>; + clock-names = "cpu-cluster.0"; + /*cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;*/ + }; + + CPU4:cpu@100 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x100>; + enable-method = "psci"; + clocks = <&scpi_dvfs 1>; + clock-names = "cpu-cluster.1"; + /*cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;*/ + }; + + CPU5:cpu@101 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x101>; + enable-method = "psci"; + clocks = <&scpi_dvfs 1>; + clock-names = "cpu-cluster.1"; + /*cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;*/ + }; + CPU6:cpu@102 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x102>; + enable-method = "psci"; + clocks = <&scpi_dvfs 1>; + clock-names = "cpu-cluster.1"; + /*cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;*/ + }; + + CPU7:cpu@103 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x103>; + enable-method = "psci"; + clocks = <&scpi_dvfs 1>; + clock-names = "cpu-cluster.1"; + /*cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;*/ + }; + + idle-states { + entry-method = "arm,psci"; + + CPU_SLEEP_0: cpu-sleep-0 { + /*compatible = "arm, idle-state";*/ + arm,psci-suspend-param = <0x0010000>; + local-timer-stop; + entry-latency-us = <5000>; + exit-latency-us = <8000>; + min-residency-us = <20000>; + }; + + CLUSTER_SLEEP_0: cluster-sleep-0 { + /*compatible = "arm, idle-state";*/ + arm,psci-suspend-param = <0x1010000>; + local-timer-stop; + entry-latency-us = <5000>; + exit-latency-us = <8000>; + min-residency-us = <25000>; + }; + }; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = , + , + , + ; + }; + timer_bc { + compatible = "arm, meson-bc-timer"; + reg= <0x0 0xc1109990 0x0 0x4 0x0 0xc1109994 0x0 0x4>; + timer_name = "Meson TimerF"; + clockevent-rating=<300>; + clockevent-shift=<20>; + clockevent-features=<0x23>; + interrupts = <0 60 1>; + bit_enable=<16>; + bit_mode=<12>; + bit_resolution=<0>; + }; + arm_pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0 137 4>, + <0 138 4>, + <0 153 4>, + <0 154 4>; + }; + meson_suspend:pm{ + compatible = "amlogic, pm"; + device_name = "aml_pm"; + gxbaby-suspend; + reg = <0x0 0xc81000a8 0x0 0x4 + 0x0 0xc810023c 0x0 0x4>; + }; + + gic: interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <3>; + #address-cells = <0>; + interrupt-controller; + reg = <0x0 0xc4301000 0 0x1000>, + <0x0 0xc4302000 0 0x0100>; + interrupts = ; + }; + + aml_restart{ + compatible = "aml, restart"; + sys_reset = <0x84000009>; + sys_poweroff = <0x84000008>; + }; + + + + psci { + compatible = "arm,psci"; + method = "smc"; + cpu_suspend = <0xC4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xC4000003>; + migrate = <0xC4000005>; + }; + secmon { + compatible = "amlogic, secmon"; + memory-region = <&secmon_reserved>; + in_base_func = <0x82000020>; + out_base_func = <0x82000021>; + }; + securitykey { + compatible = "aml, securitykey"; + storage_query = <0x82000060>; + storage_read = <0x82000061>; + storage_write = <0x82000062>; + storage_tell = <0x82000063>; + storage_verify = <0x82000064>; + storage_status = <0x82000065>; + storage_list = <0x82000067>; + storage_remove = <0x82000068>; + storage_in_func = <0x82000023>; + storage_out_func = <0x82000024>; + storage_block_func = <0x82000025>; + storage_size_func = <0x82000027>; + }; + cpu_iomap{ + compatible = "amlogic, iomap"; + #address-cells=<2>; + #size-cells=<2>; + ranges; + io_cbus_base{ + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + io_apb_base{ + reg = <0x0 0xd0000000 0x0 0x200000>; + }; + io_aobus_base{ + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + }; + + cpufreq { + compatible = "arm, scpi-cpufreq"; + }; + + amlogic-watchdog{ + compatible = "amlogic, gx-wdt"; + status = "disable"; + default_timeout=<10>; + reset_watchdog_method=<1>;//0:sysfs,1:kernel + reset_watchdog_time=<2>; + shutdown_timeout=<10>; + firmware_timeout=<6>; + suspend_timeout=<6>; + reg = <0x0 0xc11098d0 0x0 0x10>; + clocks = <&clock CLK_XTAL>; + }; + amlogic-jtag { + compatible = "amlogic, jtag"; + status = "okay"; + pinctrl-names = "jtag_apao_pins", "jtag_apee_pins"; + pinctrl-0 = <&jtag_apao_pins>; + pinctrl-1 = <&jtag_apee_pins>; + }; + clock: meson_clock { + compatible = "amlogic, gxl-clock"; + reg = <0x0 0xc883c000 0x0 0x1000>, /* HIU BUS*/ + <0x0 0xc8100000 0x0 0x1000>; //AOBUS + #clock-cells = <1>; + #reset-cells = <1>; + sys_max = <1536000000>; + }; + cpu_info{ + compatible = "amlogic, cpuinfo"; + cpuinfo_cmd = <0x82000044>; + }; + pinmux: pinmux{ + compatible = "amlogic, pinmux-gxl"; + dev_name = "pinmux"; + #pinmux-cells=<2>; + #address-cells = <2>; + #size-cells = <2>; + reg = <0x0 0xc1109880 0x0 0x10>; + ranges; + gpio: banks@c11080b0 { + reg = <0x0 0xc88344b0 0x0 0x28>, + <0x0 0xc88344e8 0x0 0x14>, + <0x0 0xc8834520 0x0 0x14>, + <0x0 0xc8834430 0x0 0x40>; + reg-names = "mux", "pull", "pull-enable", "gpio"; + gpio-controller; + #gpio-cells = <2>; + }; + gpio_ao: ao-bank@c1108030 { + reg = <0x0 0xc8100014 0x0 0x8>, + <0x0 0xc810002c 0x0 0x4>, + <0x0 0xc8100024 0x0 0x8>; + reg-names = "mux", "pull", "gpio"; + gpio-controller; + #gpio-cells = <2>; + }; + external_eth_pins:external_eth_pins{ + amlogic,setmask =<4 0xfffc00>; + amlogic,clrmask =<4 0x3fc>, + <3 0xffcff800>; + amlogic,pins="GPIOZ_0","GPIOZ_1","GPIOZ_2","GPIOZ_3", + "GPIOZ_4","GPIOZ_5","GPIOZ_6","GPIOZ_7", + "GPIOZ_8","GPIOZ_9","GPIOZ_10","GPIOZ_11", + "GPIOZ_12","GPIOZ_13"; + }; + internal_eth_pins:internal_eth_pins{ + amlogic,setmask =<4 0x3000000>; + amlogic,clrmask =<3 0x300000>; + amlogic,pins="GPIOZ_14","GPIOZ_15"; + }; + jtag_apao_pins:jtag_apao_pin{ + amlogic,clrmask = <6 0x7fe0000>; + amlogic,pins = "GPIOH_6","GPIOH_7","GPIOH_8","GPIOH_9"; + }; + jtag_apee_pins:jtag_apee_pin{ + amlogic,clrmask = <6 0x3c>; + amlogic,pins = "CARD_0","CARD_1","CARD_2","CARD_3"; + }; + remote_pins:remote_pin{ + amlogic,setmask = ; + amlogic,pins = "GPIOAO_7"; + }; + ao_uart_pins:ao_uart{ + amlogic,setmask=; + amlogic,pins="GPIOAO_0", "GPIOAO_1"; + }; + ao_b_uart_pins:ao_b_uart{ + amlogic,setmask=; + amlogic,pins="GPIOAO_4", "GPIOAO_5"; + }; + a_uart_pins:a_uart{ + amlogic,setmask=<5 0xf0000>; + amlogic,clrmask=<5 0x3c0>; + amlogic,pins="GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15"; + }; + b_uart_pins:b_uart{ + amlogic,setmask=<2 0x18000>; + amlogic,pins="GPIODV_24", "GPIODV_25"; + }; + c_uart_pins:c_uart{ + amlogic,setmask=<5 0x3000>; + amlogic,pins="GPIOX_8", "GPIOX_9"; + }; + wifi_32k_pins:wifi_32k_pins{ + amlogic,setmask=<5 0x8000>; + amlogic,pins="GPIOX_16"; + }; + sd_clk_cmd_pins:sd_clk_cmd_pins{ + amlogic,setmask=<6 0x0000000c>, + ; + amlogic,pins = "CARD_2","CARD_3"; /* CARD_2:CLK, CARD_3:CMD */ + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_all_pins:sd_all_pins{ + amlogic,setmask=<6 0x0000003f>, + ; + amlogic,clrmask=<6 0x00000fc0>; + amlogic,pins="CARD_0","CARD_1","CARD_2","CARD_3","CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_1bit_pins:sd_1bit_pins{ + amlogic,setmask=<6 0x0000001c>, + ; + amlogic,clrmask=<6 0x00000cc3>; + amlogic,pins = "CARD_1","CARD_2","CARD_3"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_clk_cmd_uart_pins:sd_clk_cmd_uart_pins{ + amlogic,setmask=<6 0x0000030c>; + amlogic,clrmask=<6 0x00000cc3>, + ; + amlogic,pins = "CARD_2","CARD_3"; /* CARD_2:CLK, CARD_3:CMD */ + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_1bit_uart_pins:sd_1bit_uart_pins{ + amlogic,setmask=<6 0x0000031c>; + amlogic,clrmask=<6 0x00000cc3>, + ; + amlogic,pins = "CARD_1","CARD_2","CARD_3"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_to_ao_uart_pins:sd_to_ao_uart_pins{ + amlogic,setmask=; + amlogic,clrmask=<6 0x00000300>; + amlogic,pins = "GPIOAO_0","GPIOAO_1"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + ao_to_sd_uart_pins:ao_to_sd_uart_pins{ + amlogic,setmask=<6 0x00000300>; + amlogic,clrmask=, + <6 0x00000cc3>; + amlogic,pins = "CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + ao_to_sd_jtag_pins:ao_to_sd_jtag_pins{ + amlogic,setmask=<6 0x00000300>; + amlogic,clrmask=<6 0x00000cff>, + ; + amlogic,pins = "CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_to_ao_jtag_pins:sd_to_ao_jtag_pins{ + amlogic,setmask=; + amlogic,clrmask=<6 0x00000fc0>; + amlogic,pins = "GPIOAO_0","GPIOAO_1"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + + emmc_clk_cmd_pins:emmc_clk_cmd_pins{ + amlogic,setmask=<7 0x60000000>; + amlogic,clrmask=<7 0x000000e0>; + amlogic,pins = "BOOT_8","BOOT_10"; /** BOOT_10:CMD, BOOT_8:CLK */ + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + emmc_conf_pull_up:emmc_conf_pull_up{ + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_10"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + emmc_conf_pull_done:emmc_conf_pull_done{ + amlogic,pins = "BOOT_15"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + + emmc_all_pins:emmc_all_pins{ + amlogic,setmask=<7 0xf0000000>; /*sdhc c*/ + amlogic,clrmask=<7 0x000000e0>; + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_10","BOOT_15"; + amlogic,enable-output=<1>; /** 0:output, 1:input */ + }; + sdio_clk_cmd_pins:sdio_clk_cmd_pins{ + amlogic,setmask=<5 0x0c000000>; + amlogic,pins = "GPIOX_4","GPIOX_5"; /** GPIOX_5:CMD, GPIOX_4:CLK */ + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sdio_all_pins:sdio_all_pins{ + amlogic,setmask=<5 0xfc000000>; + amlogic,pins = "GPIOX_0","GPIOX_1","GPIOX_2","GPIOX_3","GPIOX_4","GPIOX_5"; + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + /*cam_gpio_b: cam_gpio_b{ + amlogic,setmask=<5 0xf0>; + amlogic,clrmask=<4 0x300 + 5 0xc000000 + 6 0x1ff3>; + amlogic,pins = "GPIOZ_0","GPIOZ_1","GPIOZ_3","GPIOZ_4","GPIOZ_5","GPIOZ_6","GPIOZ_7","GPIOZ_8","GPIOZ_9","GPIOZ_10","GPIOZ_11"; + }; + */ + conf_nand_pulldown: conf_nand_pulldown{ + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_15"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + conf_nand_pullup: conf_nand_pullup{ + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + all_nand_pins: all_nand_pins{ + amlogic,setmask=<7 0x800000ff>; + amlogic,clrmask=<7 0x70ffbc00>; + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_9", + "BOOT_10","BOOT_11","BOOT_12","BOOT_13", + "BOOT_14","BOOT_15"; + amlogic,enable-output=<1>; + }; + nand_cs_pins: nand_cs{ + amlogic,setmask=<7 0xc0>; + amlogic,clrmask=<7 0x40040000>; + amlogic,pins = "BOOT_8","BOOT_9"; + }; + hdmitx_hpd: hdmitx_hpd { + amlogic,setmask=<6 0x80000000>; + amlogic,pins="GPIOH_0"; + }; + hdmitx_ddc: hdmitx_ddc { + amlogic,setmask=<6 0x30000000>; + amlogic,pins="GPIOH_1", "GPIOH_2"; + }; + hdmitx_aocec: hdmitx_aocec { + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_8"; + }; + hdmitx_eecec: hdmitx_eecec { + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_8"; + }; + + /*p200 i2c-A multiplex with usb PWR*/ + a_i2c_master:a_i2c{ + amlogic,setmask=<1 0xc000>; + amlogic,clrmask=<3 0x18 2 0x18000 2 0xc0 1 0x600000>; + amlogic,pins="GPIODV_24","GPIODV_25"; + }; + b_i2c_master:b_i2c{ + amlogic,setmask=<1 0x3000>; + amlogic,clrmask=<2 0x6000 1 0x1c0000>; + amlogic,pins="GPIODV_26","GPIODV_27"; + }; + c_i2c_master:c_i2c{ + amlogic,setmask=<1 0xc00>; + amlogic,clrmask=<2 0x1800 1 0x200 2 0x20>; + amlogic,pins="GPIODV_28","GPIODV_29"; + }; + d_i2c_master:d_i2c{ + amlogic,setmask=<5 0x30>; + amlogic,clrmask=<5 0x300c03>; + amlogic,pins="GPIOX_10","GPIOX_11"; + }; + + spicc_pins_z11z12z13: spicc_pins_z11z12z13{ + amlogic,setmask=<4 0x1c>; + amlogic,clrmask=<3 0x800 4 0x1c00>; + amlogic,pins="GPIOZ_11","GPIOZ_12","GPIOZ_13"; + }; + spicc_pulldown_z11z12z13: spicc_pulldown_z11z12z13{ + amlogic,pins="GPIOZ_11","GPIOZ_12","GPIOZ_13"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + spicc_pullup_z11z12z13: spicc_pullup_z11z12z13{ + amlogic,pins="GPIOZ_11","GPIOZ_12","GPIOZ_13"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + spicc_pins_x8x9x11: spicc_pins_x8x9x11{ + amlogic,setmask=<5 0xd>; + amlogic,clrmask=<5 0xd03430 6 0xd>; + amlogic,pins="GPIOX_8","GPIOX_9","GPIOX_11"; + }; + spicc_pulldown_x8x9x11: spicc_pulldown_x8x9x11{ + amlogic,pins = "GPIOX_8","GPIOX_9","GPIOX_11"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + spicc_pullup_x8x9x11: spicc_pullup_x8x9x11{ + amlogic,pins = "GPIOX_8","GPIOX_9","GPIOX_11"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + }; + cpu_version{ + reg=<0x0 0xc8100220 0x0 0x4>; + }; + meson_clk_msr{ + compatible = "amlogic, gxl_measure"; + reg = <0x0 0xc110875c 0x0 0x4 + 0x0 0xc1108764 0x0 0x4>; + }; + + i2c_a: i2c@c1108500{ /*I2C-A*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-A"; + status = "disabled"; + reg = <0x0 0xc1108500 0x0 0x20>; + device_id = <1>; + pinctrl-names="default"; + pinctrl-0=<&a_i2c_master>;/*p200 i2c-A multiplex with usb PWR*/ + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_b: i2c@c11087c0{ /*I2C-B*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-B"; + status = "disabled"; + reg = <0x0 0xc11087c0 0x0 0x20>; + device_id = <2>; + pinctrl-names="default"; + pinctrl-0=<&b_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_c: i2c@c11087e0{ /*I2C-C*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-C"; + status = "disabled"; + reg = <0x0 0xc11087e0 0x0 0x20>; + device_id = <3>; + pinctrl-names="default"; + pinctrl-0=<&c_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_d: i2c@c1108d20{ /*I2C-D*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-D"; + status = "disabled"; + reg = <0x0 0xc1108d20 0x0 0x20>; + device_id = <4>; + pinctrl-names="default"; + pinctrl-0=<&d_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + efuse: efuse{ + compatible = "amlogic, efuse"; + read_cmd = <0x82000030>; + write_cmd = <0x82000031>; + get_max_cmd = <0x82000033>; + key = <&efusekey>; + resets = <&clock GCLK_IDX_EFUSE>; + reset-names = "efuse_clk"; + status = "disabled"; + }; + efusekey:efusekey{ + keynum = <4>; + key0 = <&key0>; + key1 = <&key1>; + key2 = <&key2>; + key3 = <&key3>; + key0:key0{ + keyname = "mac"; + offset = <0>; + size = <6>; + }; + key1:key1{ + keyname = "mac_bt"; + offset = <6>; + size = <6>; + }; + key2:key2{ + keyname = "mac_wifi"; + offset = <12>; + size = <6>; + }; + key3:key3{ + keyname = "usid"; + offset = <18>; + size = <16>; + }; + }; + + mailbox: mhu@c883c400 { + compatible = "amlogic, meson_mhu"; + reg = <0x0 0xc883c400 0x0 0x4c>, /* MHU registers */ + <0x0 0xc8013000 0x0 0x800>; /* Payload area */ + interrupts = <0 209 8>, /* low priority interrupt */ + <0 210 8>; /* high priority interrupt */ + #mbox-cells = <1>; + mbox-names = "cpu_to_scp_low", "cpu_to_scp_high"; + mboxes = <&mailbox 0 &mailbox 1>; + }; + scpi_clocks { + compatible = "arm,scpi-clks"; + + scpi_dvfs: scpi_clocks@0 { + compatible = "arm,scpi-clk-indexed"; + #clock-cells = <1>; + clock-indices = <0 1>; + clock-output-names = "vbig", "vlittle"; + }; + + }; + meson-remote { + compatible = "amlogic, aml_remote"; + dev_name = "meson-remote"; + status = "okay"; + remote_ao_offset = <0x580>; /* 0x400 + (0x20 + idx)<<2 -- old ; 0x400 + (0x60 +idx)<<2 --new */ + interrupts = <0 196 1>; + pinctrl-names = "default"; + pinctrl-0 = <&remote_pins>; + }; + + rng { + compatible = "amlogic,meson-rng"; + reg = <0x0 0xc8834000 0x0 0x4>; + }; + + audio_data:audio_data { + compatible = "amlogic, audio_data"; + query_licence_cmd = <0x82000050>; + status = "disabled"; + }; + + saradc: saradc { + compatible = "amlogic, saradc"; + status = "okay"; + interrupts = <0 9 1>; + interrupt-names = "saradc_int"; + clocks = <&clock CLK_XTAL>; + clock-names = "saradc_clk"; + resets = <&clock GCLK_IDX_SARADC>; + reg = <0x0 0xc1108680 0x0 0x30 + 0x0 0xc883c3d8 0x0 0x08>; + }; + + defendkey: defendkey { + compatible = "amlogic, defendkey"; + reg = <0x0 0xc8834500 0x0 0x4>; /*RAND64_ADDR0*/ + mem_size = <0x0 0x100000>; + status = "disabled"; + }; + + spicc:spicc{ + compatible = "amlogic, spicc"; + status = "disabled"; + reg = <0x0 0xc1108d80 0x0 0x28>; + resets = <&clock GCLK_IDX_SPICC>; + clocks = <&clock CLK_81>; + clock-names = "spicc_clk"; + interrupts = <0 81 1>; + device_id = <0>; + }; + aml_aes{ + compatible = "amlogic,aes_dma"; + dev_name = "aml_aes_dma"; + interrupts = <0 188 1 + 0 189 1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + aml_tdes{ + compatible = "amlogic,des_dma,tdes_dma"; + dev_name = "aml_tdes_dma"; + interrupts = <0 188 1 + 0 189 1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + aml_sha{ + compatible = "amlogic,sha_dma"; + dev_name = "aml_sha_dma"; + interrupts = <0 188 1 + 0 189 1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + +};/* end of / */ diff --git a/arch/arm64/boot/dts/mesongxtvbb-gpu-t83x.dtsi b/arch/arm64/boot/dts/mesongxtvbb-gpu-t83x.dtsi new file mode 100644 index 0000000000000..9efee6babcf84 --- /dev/null +++ b/arch/arm64/boot/dts/mesongxtvbb-gpu-t83x.dtsi @@ -0,0 +1,208 @@ +/* + * Amlogic GXTVBB Platform gpu + * + * Copyright (c) 2015-2015 Amlogic Ltd + * + * This file is licensed under a dual GPLv2 or BSD license. + * + */ + +/ { + t83x_gpu:t83x@d00c0000{ + compatible = "arm,malit602", "arm,malit60x", "arm,malit6xx", "arm,mali-midgard"; + #cooling-cells = <2>; /* min followed by max */ + reg = <0 0xd00c0000 0 0x100000>, + <0 0xc1104440 0 0x001000>, + <0 0xc8100000 0 0x001000>, + <0 0xc883c000 0 0x001000>, /*hiubus base address for gpu clk cntl*/ + <0 0xc1104440 0 0x001000>; + interrupt-parent = <&gic>; + interrupts = <0 160 4>, <0 161 4>, <0 162 4>; + interrupt-names = "GPU", "MMU", "JOB"; + num_of_pp = <2>; + sc_mpp = <1>;/* number of pp used most of time.*/ + /*mali-supply = <&vdd_mali>;*/ + operating-points = < + /* KHz uV */ + 666666 1000000 + 500000 1000000 + 400000 1000000 + 285714 1000000 + 250000 1000000 + 125000 1000000 + >; + + tbl = <&dvfs125_cfg &dvfs285_cfg &dvfs400_cfg &dvfs500_cfg &dvfs666_cfg>; + + /*clocks = <&gpu_clk>; + clock-names = "clk_mali";*/ + clocks = <&clock CLK_FPLL_DIV3>, + <&clock CLK_FPLL_DIV4>, + <&clock CLK_FPLL_DIV5>, + <&clock CLK_FPLL_DIV7>, + <&clock GP0_PLL>, + <&clock CLK_MALI>, + <&clock CLK_MALI_0>, + <&clock CLK_MALI_1>; + clock-names = + "fclk_div3", + "fclk_div4", + "fclk_div5", + "fclk_div7", + "gp0_pll", + "clk_gpu", + "clk_gpu_0", + "clk_gpu_1"; + + dvfs125_cfg:clk125_cfg { + clk_freq = <125000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <30 120>; + }; + + dvfs250_cfg:dvfs250_cfg { + clk_freq = <250000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <80 170>; + }; + + dvfs285_cfg:dvfs285_cfg { + clk_freq = <285714000>; + clk_parent = "fclk_div7"; + clkp_freq = <285714000>; + voltage = <1150>; + keep_count = <5>; + threshold = <100 190>; + }; + + dvfs400_cfg:dvfs400_cfg { + clk_freq = <400000000>; + clk_parent = "fclk_div5"; + clkp_freq = <400000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <152 207>; + }; + + dvfs500_cfg:dvfs500_cfg { + clk_freq = <500000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <180 220>; + }; + + dvfs666_cfg:dvfs666_cfg { + clk_freq = <666000000>; + clk_parent = "fclk_div3"; + clkp_freq = <666000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <210 236>; + }; + + dvfs800_cfg:dvfs800_cfg { + clk_freq = <792000000>; + clk_parent = "gp0_pll"; + clkp_freq = <792000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <230 255>; + }; + }; + + gpu_clk:gpu_clk@c883c00 { + compatible = "meson, gpu-clkgen-1.00.a"; + #clock-cells = <0>; + reg = <0 0xc883c000 0 0x001000>; + clocks = <&clock CLK_FPLL_DIV3>, + <&clock CLK_FPLL_DIV4>, + <&clock CLK_FPLL_DIV5>, + <&clock CLK_FPLL_DIV7>, + <&clock GP0_PLL>, + <&clock CLK_GPU>, + <&clock CLK_GPU_0>, + <&clock CLK_GPU_1>; + clock-names = + "fclk_div3", + "fclk_div4", + "fclk_div5", + "fclk_div7", + "gp0_pll", + "clk_gpu", + "clk_gpu_0", + "clk_gpu_1"; + clock-output-names = "clk_mali"; + tbl = <&t83x_clk125_cfg &t83x_clk250_cfg &t83x_clk285_cfg &t83x_clk400_cfg &t83x_clk500_cfg &t83x_clk666_cfg>; + t83x_clk125_cfg:clk125_cfg { + clk_freq = <125000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <30 120>; + }; + + t83x_clk250_cfg:clk250_cfg { + clk_freq = <250000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <80 170>; + }; + + t83x_clk285_cfg:clk285_cfg { + clk_freq = <285714000>; + clk_parent = "fclk_div7"; + clkp_freq = <285714000>; + voltage = <1150>; + keep_count = <5>; + threshold = <100 190>; + }; + + t83x_clk400_cfg:clk400_cfg { + clk_freq = <400000000>; + clk_parent = "fclk_div5"; + clkp_freq = <400000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <152 207>; + }; + + t83x_clk500_cfg:clk500_cfg { + clk_freq = <500000000>; + clk_parent = "fclk_div4"; + clkp_freq = <500000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <180 220>; + }; + + t83x_clk666_cfg:clk666_cfg { + clk_freq = <666666000>; + clk_parent = "fclk_div3"; + clkp_freq = <666666000>; + voltage = <1150>; + keep_count = <5>; + threshold = <210 236>; + }; + + t83x_clk720_cfg:clk720_cfg { + clk_freq = <720000000>; + clk_parent = "gp0_pll"; + clkp_freq = <720000000>; + voltage = <1150>; + keep_count = <5>; + threshold = <230 255>; + }; + }; + +};/* end of / */ diff --git a/arch/arm64/boot/dts/mesongxtvbb.dtsi b/arch/arm64/boot/dts/mesongxtvbb.dtsi new file mode 100644 index 0000000000000..f10b32de8986d --- /dev/null +++ b/arch/arm64/boot/dts/mesongxtvbb.dtsi @@ -0,0 +1,775 @@ +#include +#include +#include +#include +#include +#include +#include "mesongxtvbb-gpu-t83x.dtsi" +/ { + cpus:cpus { + #address-cells = <2>; + #size-cells = <0>; + #cooling-cells = <2>; /* min followed by max */ + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + }; + + cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + }; + cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + }; + + cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + }; + + + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = , + , + , + ; + }; + + timer_bc { + compatible = "arm, meson-bc-timer"; + reg= <0x0 0xc1109990 0x0 0x4 0x0 0xc1109994 0x0 0x4>; + timer_name = "Meson TimerF"; + clockevent-rating=<300>; + clockevent-shift=<20>; + clockevent-features=<0x03>; + interrupts = <0 60 1>; + bit_enable=<16>; + bit_mode=<12>; + bit_resolution=<0>; + }; + arm_pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0 137 4>, + <0 138 4>, + <0 153 4>, + <0 154 4>; + }; + meson_suspend:pm{ + compatible = "amlogic, pm"; + device_name = "aml_pm"; + gxbaby-suspend; + reg = <0x0 0xc81000a8 0x0 0x4 + 0x0 0xc810023c 0x0 0x4>; + }; + + gic: interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <3>; + #address-cells = <0>; + interrupt-controller; + reg = <0x0 0xc4301000 0 0x1000>, + <0x0 0xc4302000 0 0x0100>; + interrupts = ; + }; + + aml_restart{ + compatible = "aml, restart"; + sys_reset = <0x84000009>; + sys_poweroff = <0x84000008>; + }; + + rtc{ + compatible = "amlogic, aml_vrtc"; + alarm_reg_addr = <0xc81000a8>; + timer_e_addr = <0xc1109988>; + init_date = "2015/01/01"; + status = "okay"; + }; + + + psci { + compatible = "arm,psci"; + method = "smc"; + cpu_suspend = <0xC4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xC4000003>; + migrate = <0xC4000005>; + }; + secmon { + compatible = "amlogic, secmon"; + memory-region = <&secmon_reserved>; + in_base_func = <0x82000020>; + out_base_func = <0x82000021>; + }; + securitykey { + compatible = "aml, securitykey"; + storage_query = <0x82000060>; + storage_read = <0x82000061>; + storage_write = <0x82000062>; + storage_tell = <0x82000063>; + storage_verify = <0x82000064>; + storage_status = <0x82000065>; + storage_list = <0x82000067>; + storage_remove = <0x82000068>; + storage_in_func = <0x82000023>; + storage_out_func = <0x82000024>; + storage_block_func = <0x82000025>; + storage_size_func = <0x82000027>; + }; + cpu_iomap{ + compatible = "amlogic, iomap"; + #address-cells=<2>; + #size-cells=<2>; + ranges; + io_cbus_base{ + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + io_apb_base{ + reg = <0x0 0xd0000000 0x0 0x200000>; + }; + io_aobus_base{ + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + }; + cpufreq-meson { + compatible = "amlogic, cpufreq-scpi"; + status = "okay"; + clocks = <&scpi_dvfs 0>; + clock-names = "cpu_clk"; + }; + + amlogic-watchdog{ + compatible = "amlogic, gx-wdt"; + status = "disable"; + default_timeout=<10>; + reset_watchdog_method=<1>;//0:sysfs,1:kernel + reset_watchdog_time=<2>; + shutdown_timeout=<10>; + firmware_timeout=<6>; + suspend_timeout=<6>; + reg = <0x0 0xc11098d0 0x0 0x10>; + clocks = <&clock CLK_XTAL>; + }; + amlogic-jtag { + compatible = "amlogic, jtag"; + status = "okay"; + pinctrl-names = "jtag_apao_pins", "jtag_apee_pins"; + pinctrl-0 = <&jtag_apao_pins>; + pinctrl-1 = <&jtag_apee_pins>; + }; + clock: meson_clock { + compatible = "amlogic, gxtvbb-clock"; + reg = <0x0 0xc883c000 0x0 0x1000>, /* HIU BUS*/ + <0x0 0xc8100000 0x0 0x1000>; //AOBUS + #clock-cells = <1>; + #reset-cells = <1>; + sys_max = <1536000000>; + }; + + pinmux: pinmux{ + compatible = "amlogic, pinmux-gxtvbb"; + dev_name = "pinmux"; + #pinmux-cells=<2>; + #address-cells = <2>; + #size-cells = <2>; + reg = <0x0 0xc1109880 0x0 0x10>; + ranges; + + gpio: banks@c11080b0 { + reg = <0x0 0xc88344b0 0x0 0x2c>, + <0x0 0xc88344e8 0x0 0x14>, + <0x0 0xc8834520 0x0 0x14>, + <0x0 0xc8834430 0x0 0x3c>; + reg-names = "mux", "pull", "pull-enable", "gpio"; + gpio-controller; + #gpio-cells = <2>; + }; + + gpio_ao: ao-bank@c1108030 { + reg = <0x0 0xc8100014 0x0 0x8>, + <0x0 0xc810002c 0x0 0x4>, + <0x0 0xc8100024 0x0 0x8>; + reg-names = "mux", "pull", "gpio"; + gpio-controller; + #gpio-cells = <2>; + }; + jtag_apao_pins:jtag_apao_pin{ + amlogic,clrmask = ; + amlogic,pins = "GPIOAO_8","GPIOAO_9","GPIOAO_10","GPIOAO_11"; + }; + jtag_apee_pins:jtag_apee_pin{ + amlogic,clrmask = <5 0x9e 10 0x3c0>; + amlogic,pins = "CARD_0","CARD_1","CARD_2","CARD_3"; + }; + remote_pins:remote_pin{ + amlogic,setmask = ; + amlogic,pins = "GPIOAO_7"; + }; + ao_a_uart_pins:ao_a_uart{ + amlogic,setmask=; + amlogic,pins="GPIOAO_0", "GPIOAO_1"; + }; + + ao_b_uart_pins:ao_b_uart{ + amlogic,setmask=; + amlogic,pins="GPIOAO_4", "GPIOAO_5"; + }; + + a_uart_pins:a_uart{ + amlogic,setmask=<2 0xf000000>; + amlogic,pins="GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15"; + }; + + b_uart_pins:b_uart{ + amlogic,setmask=<7 0x6>; + amlogic,pins="GPIOH_1", "GPIOH_2"; + }; + + b_uart_pins_y:b_uart_y{ + amlogic,setmask=<10 0x3000>; + amlogic,clrmask=<10 0x1e0c000>; + amlogic,pins="GPIOY_12", "GPIOY_13"; + }; + + wifi_32k_pins:wifi_32k_pins{ + amlogic,setmask=<7 0x8000000>; + amlogic,clrmask=<7 0x12020000>; + amlogic,pins="GPIOH_7"; + }; + sd_clk_cmd_pins:sd_clk_cmd_pins{ + amlogic,setmask=<5 0x00000018>; + amlogic,clrmask=<5 0x00000080 10 0x400>; + amlogic,pins = "CARD_2","CARD_3"; /* CARD_2:CLK, CARD_3:CMD */ + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + sd_all_pins:sd_all_pins{ + amlogic,setmask=<5 0x0000007e>; + amlogic,clrmask=<5 0x00000f80 10 0x400>; + amlogic,pins="CARD_0","CARD_1","CARD_2","CARD_3","CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + sd_1bit_pins:sd_1bit_pins{ + amlogic,setmask=<5 0x0000001c>; + amlogic,clrmask=<5 0x00000080 10 0x400>; + amlogic,pins = "CARD_1","CARD_2","CARD_3"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + sd_clk_cmd_uart_pins:sd_clk_cmd_uart_pins{ + amlogic,setmask=<2 0x00000c00>, + <8 0x00000600>; + amlogic,pins = "CARD_2","CARD_3"; /* CARD_2:CLK, CARD_3:CMD */ + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + sd_1bit_uart_pins:sd_1bit_uart_pins{ + amlogic,setmask=<2 0x00008c00>, + <8 0x00000600>; + amlogic,pins = "CARD_1","CARD_2","CARD_3"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + sd_to_ao_uart_pins:sd_to_ao_uart_pins{ + amlogic,setmask=; + amlogic,clrmask=<8 0x00000600>; + amlogic,pins = "GPIOAO_0","GPIOAO_1"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + ao_to_sd_uart_pins:ao_to_sd_uart_pins{ + amlogic,setmask=<8 0x00000600>; + amlogic,clrmask=, + <2 0x00003000>; + amlogic,pins = "CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + + emmc_clk_cmd_pins:emmc_clk_cmd_pins{ + amlogic,setmask=<5 0x0000f000>; + amlogic,pins = "BOOT_8","BOOT_10"; /** BOOT_10:CMD, BOOT_8:CLK */ + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + emmc_all_pins:emmc_all_pins{ + amlogic,setmask=<5 0x0000f000>; /*sdhc c*/ + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_10"; + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + sdio_clk_cmd_pins:sdio_clk_cmd_pins{ + amlogic,setmask=<0 0x00000300>; + amlogic,clrmask=<0 0x8c0300 1 0x804 2 0x40200>; + amlogic,pins = "GPIOX_8","GPIOX_9"; /** GPIOX_5:CMD, GPIOX_4:CLK */ + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + sdio_all_pins:sdio_all_pins{ + amlogic,setmask=<0 0x000003ff>; + amlogic,clrmask=<0 0x8ffc00 1 0x3ffc0c07 2 0x403ff>; + amlogic,pins = "GPIOX_0","GPIOX_1","GPIOX_2","GPIOX_3","GPIOX_4","GPIOX_5", + "GPIOX_6","GPIOX_7","GPIOX_8","GPIOX_9"; + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + /*aml_cam_gpio_pins: aml_cam_gpio_pins{ + amlogic,setmask=<2 0x3f0000>; + amlogic,clrmask=<1 0x7030ff 3 0x37>; + amlogic,pins = "GPIOY_0","GPIOY_1","GPIOY_2","GPIOY_3","GPIOY_4", + "GPIOY_5","GPIOY_6","GPIOY_7","GPIOY_8", + "GPIOY_9","GPIOY_10","GPIOY_15","GPIOY_16"; + };*/ + + conf_nand_pulldown: conf_nand_pulldown{ + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_15"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + + conf_nand_pullup: conf_nand_pullup{ + amlogic,pins = "BOOT_8", "BOOT_10"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + all_nand_pins: all_nand_pins{ + amlogic,setmask=<4 0x7ff00000>; + amlogic,clrmask=<0 0x80000 + 4 0x800c0000 + 5 0xf>; + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_9", + "BOOT_10","BOOT_11","BOOT_12","BOOT_13", + "BOOT_14","BOOT_15","BOOT_16","BOOT_17"; + amlogic,enable-output=<1>; + }; + + nand_cs_pins: nand_cs{ + amlogic,setmask=<4 0xc000000>; + amlogic,clrmask=<4 0x40000>; + amlogic,pins = "BOOT_8","BOOT_9"; + }; + + hdmitx_hpd: hdmitx_hpd { + amlogic,setmask=<1 0x04000000>; + amlogic,pins="GPIOH_5"; + }; + hdmitx_ddc: hdmitx_ddc { + amlogic,setmask=<1 0x03000000>; + amlogic,pins="GPIOH_3", "GPIOH_4"; + }; + hdmitx_aocec: hdmitx_aocec { + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_9"; + }; + hdmitx_eecec: hdmitx_eecec { + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_9"; + }; + lcd_vbyone_pins:lcd_vbyone_pin { + amlogic,setmask = <7 0x00001800>; + amlogic,clrmask = <7 0x00000606>; + amlogic,pins = "GPIOH_1","GPIOH_2"; + }; + lcd_ttl_rgb_6bit_pins_on:lcd_ttl_rgb_6bit_on{ + amlogic,setmask=<1 0x0000002a>; + amlogic,clrmask=<0 0xf0b3f0fc 1 0x003c0000 2 0x1fb8fcfc 3 0x2016ffcf>; + amlogic,pins = "GPIOX_2","GPIOX_3","GPIOX_4","GPIOX_5","GPIOX_6","GPIOX_7", /* R2~R7 */ + "GPIOX_10","GPIOX_11","GPIOX_12","GPIOX_13","GPIOX_14","GPIOX_15", /* G2~G7 */ + "GPIOX_18","GPIOX_19","GPIOX_20","GPIOX_21","GPIOX_22","GPIOX_23"; /* B2~B7 */ + }; + + lcd_ttl_rgb_6bit_pins_off:lcd_ttl_rgb_6bit_off{ + amlogic,clrmask=<0 0xf0b3f0fc 1 0x003c002a 2 0x1fb8fcfc 3 0x2016ffcf>; + amlogic,pins = "GPIOX_2","GPIOX_3","GPIOX_4","GPIOX_5","GPIOX_6","GPIOX_7", /* R2~R7 */ + "GPIOX_10","GPIOX_11","GPIOX_12","GPIOX_13","GPIOX_14","GPIOX_15", /* G2~G7 */ + "GPIOX_18","GPIOX_19","GPIOX_20","GPIOX_21","GPIOX_22","GPIOX_23"; /* B2~B7 */ + amlogic,enable-output=<1>; + }; + lcd_ttl_rgb_8bit_pins_on:lcd_ttl_rgb_8bit_on{ + amlogic,setmask=<1 0x0000003f>; + amlogic,clrmask=<0 0xf0bfffff 1 0x00fc1c00 2 0x1fbfffff 3 0x2016ffff>; + amlogic,pins = "GPIOX_0","GPIOX_1","GPIOX_2","GPIOX_3","GPIOX_4","GPIOX_5","GPIOX_6","GPIOX_7", /* R0~R7 */ + "GPIOX_8","GPIOX_9","GPIOX_10","GPIOX_11","GPIOX_12","GPIOX_13","GPIOX_14","GPIOX_15", /* G0~G7 */ + "GPIOX_16","GPIOX_17","GPIOX_18","GPIOX_19","GPIOX_20","GPIOX_21","GPIOX_22","GPIOX_23"; /* B0~B7 */ + }; + + lcd_ttl_rgb_8bit_pins_off:lcd_ttl_rgb_8bit_off{ + amlogic,clrmask=<0 0xf0bfffff 1 0x00fc1c3f 2 0x1fbfffff 3 0x2016ffff>; + amlogic,pins = "GPIOX_0","GPIOX_1","GPIOX_2","GPIOX_3","GPIOX_4","GPIOX_5","GPIOX_6","GPIOX_7", /* R0~R7 */ + "GPIOX_8","GPIOX_9","GPIOX_10","GPIOX_11","GPIOX_12","GPIOX_13","GPIOX_14","GPIOX_15", /* G0~G7 */ + "GPIOX_16","GPIOX_17","GPIOX_18","GPIOX_19","GPIOX_20","GPIOX_21","GPIOX_22","GPIOX_23"; /* B0~B7 */ + amlogic,enable-output=<1>; + }; + lcd_ttl_de_on_pins:lcd_ttl_de_on_pin{ /* DE + clk */ + amlogic,setmask=<1 0x00018000>; + amlogic,clrmask=<0 0x0c000000 1 0x00020000 3 0xdf000000>; + amlogic,pins = "GPIOX_26","GPIOX_27"; + }; + + lcd_ttl_de_off_pins:lcd_ttl_de_off_pin{ /* DE + clk */ + amlogic,clrmask=<0 0x0c000000 1 0x00038000 3 0xdf000000>; + amlogic,pins = "GPIOX_26","GPIOX_27"; + amlogic,enable-output=<1>; + }; + + lcd_ttl_hvsync_on_pins:lcd_ttl_hvsync_on_pin{ /* hvsync + clk */ + amlogic,setmask=<1 0x0000e000>; + amlogic,clrmask=<0 0x07000000 1 0x000000c0 3 0x6fc90000>; + amlogic,pins = "GPIOX_24","GPIOX_25","GPIOX_26"; + }; + + lcd_ttl_hvsync_off_pins:lcd_ttl_hvsync_off_pin{ /* hvsync + clk */ + amlogic,clrmask=<0 0x07000000 1 0x0000e0c0 3 0x6fc90000>; + amlogic,pins = "GPIOX_24","GPIOX_25","GPIOX_26"; + amlogic,enable-output=<1>; + }; + + lcd_ttl_de_hvsync_on_pins:lcd_ttl_de_hvsync_on_pin{ /* DE + hvsync + clk */ + amlogic,setmask=<1 0x0001e000>; + amlogic,clrmask=<0 0x0f000000 1 0x000200c0 3 0xffc90000>; + amlogic,pins = "GPIOX_24","GPIOX_25","GPIOX_26","GPIOX_27"; + }; + + lcd_ttl_de_hvsync_off_pins:lcd_ttl_de_hvsync_off_pin{ /* DE + hvsync + clk */ + amlogic,clrmask=<0 0x0f000000 1 0x0003e0c0 3 0xffc90000>; + amlogic,pins = "GPIOX_24","GPIOX_25","GPIOX_26","GPIOX_27"; + amlogic,enable-output=<1>; + }; + + atvdemod_agc: atvdemod_agc { + amlogic,setmask=<5 0x01000000>; + amlogic,clrmask=<5 0x0e000000>; + amlogic,pins="GPIOW_2"; + }; + + /*gxtvbb i2c multiplex */ + /*I2C-AO*/ + ao_i2c_master:ao_i2c{ + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_4","GPIOAO_5"; + }; + /*I2C-A*/ + a_i2c_master:a_i2c{ + amlogic,setmask=<5 0xc00000>; + amlogic,clrmask=<5 0x300000>; + amlogic,pins="GPIOW_0","GPIOW_1"; + }; + a_i2c_master_pin1:a_i2c_pin1{ + amlogic,setmask=<9 0x180>; + amlogic,clrmask=<8 0x6000000 9 0x30000678 10 0x1>; + amlogic,pins="GPIOZ_17","GPIOZ_18"; + }; + /*I2C-B*/ + b_i2c_master:b_i2c{ + amlogic,setmask=<10 0xc000>; + amlogic,clrmask=<10 0x1e03000>; + amlogic,pins="GPIOY_12","GPIOY_13"; + }; + b_i2c_master_pin1:b_i2c_pin1{ + amlogic,setmask=<7 0xc0>; + amlogic,clrmask=<7 0x180000>; + amlogic,pins="GPIOH_3","GPIOH_4"; + }; + /*I2C-C*/ + c_i2c_master:c_i2c{ + amlogic,setmask=<1 0xc00000>; + amlogic,clrmask=<0 0x800c03 1 0x300401 2 0x3>; + amlogic,pins="GPIOX_0","GPIOX_1"; + }; + c_i2c_master_pin1:c_i2c_pin1{ + amlogic,setmask=<4 0x30000000>; + amlogic,clrmask=<4 0xd801808 10 0x70000>; + amlogic,pins="GPIOY_7","GPIOY_8"; + }; + /*I2C-D*/ + d_i2c_master:d_i2c{ + amlogic,setmask=<10 0xc00>; + amlogic,clrmask=<4 0xc000c008>; + amlogic,pins="GPIOY_10","GPIOY_11"; + }; + d_i2c_master_pin1:d_i2c_pin1{ + amlogic,setmask=<7 0x1800000>; + amlogic,clrmask=<7 0x610028>; + amlogic,pins="GPIOH_5","GPIOH_6"; + }; + + avin_gpio_disable_pull:avin_gpio_disable_pull{ + amlogic,clrmask=<6 0x7f 9 0x40000000>; + amlogic,pins = "GPIOW_3","GPIOW_4"; + amlogic,enable-output=<1>; + amlogic,pullupen=<0>; + }; + + spicc_pins_h6h7h8: spicc_pins_h6h7h8{ + amlogic,setmask=<7 0x70000>; + amlogic,clrmask=<7 0x7f400028>; + amlogic,pins="GPIOH_6","GPIOH_7","GPIOH_8"; + }; + spicc_pulldown_h6h7h8: spicc_pulldown_h6h7h8{ + amlogic,pins = "GPIOH_6","GPIOH_7","GPIOH_8"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + spicc_pullup_h6h7h8: spicc_pullup_h6h7h8{ + amlogic,pins = "GPIOH_6","GPIOH_7","GPIOH_8"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + + spicc_pins_y4y5y6: spicc_pins_y4y5y6{ + amlogic,setmask=<4 0x700000>; + amlogic,clrmask=<4 0x708>; + amlogic,pins="GPIOY_4","GPIOY_5","GPIOY_6"; + }; + spicc_pulldown_y4y5y6: spicc_pulldown_y4y5y6{ + amlogic,pins="GPIOY_4","GPIOY_5","GPIOY_6"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + spicc_pullup_y4y5y6: spicc_pullup_y4y5y6{ + amlogic,pins="GPIOY_4","GPIOY_5","GPIOY_6"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + }; + cpu_version{ + reg=<0x0 0xc8100220 0x0 0x4>; + }; + meson_clk_msr{ + compatible = "amlogic, gxtvbb_measure"; + reg = <0x0 0xc110875c 0x0 0x4 + 0x0 0xc1108764 0x0 0x4 + 0x0 0xc883c15c 0x0 0x4>; + }; + + i2c_ao: i2c@c8100500{ /*I2C-AO*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-AO"; + status = "disabled"; + reg = <0x0 0xc8100500 0x0 0x1d>; + device_id = <0>; + pinctrl-names="default"; + pinctrl-0=<&ao_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_a: i2c@c1108500{ /*I2C-A*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-A"; + status = "disabled"; + reg = <0x0 0xc1108500 0x0 0x20>; + device_id = <1>; + pinctrl-names="default"; + pinctrl-0=<&a_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_b: i2c@c11087c0{ /*I2C-B*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-B"; + status = "disabled"; + reg = <0x0 0xc11087c0 0x0 0x20>; + device_id = <2>; + pinctrl-names="default"; + pinctrl-0=<&b_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_c: i2c@c11087e0{ /*I2C-C*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-C"; + status = "disabled"; + reg = <0x0 0xc11087e0 0x0 0x20>; + device_id = <3>; + pinctrl-names="default"; + pinctrl-0=<&c_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + i2c_d: i2c@c1108d20{ /*I2C-D*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-D"; + status = "disabled"; + reg = <0x0 0xc1108d20 0x0 0x20>; + device_id = <4>; + pinctrl-names="default"; + pinctrl-0=<&d_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + + efuse: efuse{ + compatible = "amlogic, efuse"; + read_cmd = <0x82000030>; + write_cmd = <0x82000031>; + get_max_cmd = <0x82000033>; + key = <&efusekey>; + status = "disabled"; + }; + efusekey:efusekey{ + keynum = <4>; + key0 = <&key_0>; + key1 = <&key_1>; + key2 = <&key_2>; + key3 = <&key_3>; + key_0:key_0{ + keyname = "mac"; + offset = <0>; + size = <6>; + }; + key_1:key_1{ + keyname = "mac_bt"; + offset = <6>; + size = <6>; + }; + key_2:key_2{ + keyname = "mac_wifi"; + offset = <12>; + size = <6>; + }; + key_3:key_3{ + keyname = "usid"; + offset = <18>; + size = <16>; + }; + }; + + mailbox: mhu@c883c400 { + compatible = "amlogic, meson_mhu"; + status = "ok"; + reg = <0x0 0xc883c400 0x0 0x4c>, /* MHU registers */ + <0x0 0xc8013000 0x0 0x800>; /* Payload area */ + interrupts = <0 209 IRQ_TYPE_EDGE_RISING>, /* low priority interrupt */ + <0 210 IRQ_TYPE_EDGE_RISING>; /* high priority interrupt */ + #mbox-cells = <1>; + mbox-names = "cpu_to_scp_low", "cpu_to_scp_high"; + mboxes = <&mailbox 0 &mailbox 1>; + }; + scpi_clocks { + compatible = "arm,scpi-clks"; + + scpi_dvfs: scpi_clocks@0 { + compatible = "arm,scpi-clk-indexed"; + #clock-cells = <1>; + clock-indices = <0>; + clock-output-names = "vcpu"; + }; + + }; + + meson-remote { + compatible = "amlogic, aml_remote"; + dev_name = "meson-remote"; + status = "ok"; + remote_ao_offset = <0x580>; /* 0x400 + (0x20 + idx)<<2 -- old ; 0x400 + (0x60 +idx)<<2 --new */ + interrupts = <0 196 1>; + pinctrl-names = "default"; + pinctrl-0 = <&remote_pins>; + }; + + rng { + compatible = "amlogic,meson-rng"; + reg = <0x0 0xc8834000 0x0 0x4>; + }; + + audio_data:audio_data { + compatible = "amlogic, audio_data"; + query_licence_cmd = <0x82000050>; + status = "disabled"; + }; + + saradc: saradc { + compatible = "amlogic, saradc"; + status = "okay"; + interrupts = <0 9 1>; + interrupt-names = "saradc_int"; + clocks = <&clock CLK_XTAL>; + clock-names = "saradc_clk"; + resets = <&clock GCLK_IDX_SARADC>; + reg = <0x0 0xc8100600 0x0 0x30 + 0x0 0xc8100090 0x0 0x08>; + }; + + spicc:spicc{ + compatible = "amlogic, spicc"; + status = "disabled"; + reg = <0x0 0xc1108d80 0x0 0x28>; + resets = <&clock GCLK_IDX_SPICC>; + clocks = <&clock CLK_81>; + clock-names = "spicc_clk"; + interrupts = <0 81 1>; + pinctrl-names="default"; + pinctrl-0=<&spicc_pins_h6h7h8>; + device_id = <0>; + }; + +};/* end of / */ diff --git a/arch/arm64/boot/dts/mesontxl-panel.dtsi b/arch/arm64/boot/dts/mesontxl-panel.dtsi new file mode 100644 index 0000000000000..03df3279010ed --- /dev/null +++ b/arch/arm64/boot/dts/mesontxl-panel.dtsi @@ -0,0 +1,271 @@ +/* + * arch/arm64/boot/dts/amlogic/mesontxl-panel.dtsi + * + * Copyright (C) 2016 Amlogic, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * +*/ + +/ { + lcd { + compatible = "amlogic, lcd"; + dev_name = "lcd"; + mode = "tv"; + status = "okay"; + key_valid = <0>; + resets = <&clock GCLK_IDX_VCLK2_ENCL &clock GCLK_IDX_VCLK2_VENCL>; + reset-names = "encl","vencl"; + interrupts = <0 78 1 0 3 1>; + interrupt-names = "vbyone","vbyone_vsync"; + pinctrl-names = "vbyone"; + pinctrl-0 = <&lcd_vbyone_pins>; + + /* power type:(0=cpu_gpio, 1=pmu_gpio, 2=signal, 3=extern, 0xff=ending) */ + /* power index:(point gpios_index, or extern_index, 0xff=invalid) */ + /* power value:(0=output low, 1=output high, 2=input) */ + /* power delay:(unit in ms) */ + lcd_cpu-gpios = <&gpio GPIOH_3 1 &gpio GPIOH_4 1>; + lcd_cpu_gpio_names = "GPIOH_3","GPIOH_4"; + + lvds_0{ + model_name = "1080p-vfreq"; + interface = "lvds"; /* lcd_interface(lvds, vbyone) */ + basic_setting = <1920 1080 2200 1125 8 16 9>; /* h_active, v_active, h_period, v_period, lcd_bits, screen_widht, screen_height */ + lcd_timing = <44 148 0 5 30 0>; /* hs_width, hs_bp, hs_pol, vs_width, vs_bp, vs_pol */ + clk_attr = <2 0 1 0>; /* fr_adj_type(0=clock, 1=htotal, 2=vtotal), clk_ss_level, clk_auto_generate, pixel_clk(unit in Hz) */ + lvds_attr = <1 1 0 0>; /* lvds_repack, dual_port, pn_swap, port_swap */ + phy_attr=<3 0>; /* vswing_level, preemphasis_level */ + power_on_step = <0 0 1 20 /* panel power on */ + 2 0 0 0 /* signal enable */ + 0xff 0 0 0>; /* type, index, value, delay */ + power_off_step = <2 0 0 20 /* signal disable */ + 0 0 0 100 /* panel power off */ + 0xff 0 0 0>; /* type, index, value, delay */ + backlight_index = <0>; + }; + lvds_1{ + model_name = "1080p-pclk"; + interface = "lvds"; /* lcd_interface(lvds, vbyone) */ + basic_setting = <1920 1080 2200 1125 8 16 9>; /* h_active, v_active, h_period, v_period, lcd_bits, screen_widht, screen_height */ + lcd_timing = <44 148 0 5 30 0>; /* hs_width, hs_bp, hs_pol, vs_width, vs_bp, vs_pol */ + clk_attr = <0 0 1 0>; /* fr_adj_type(0=clock, 1=htotal, 2=vtotal), clk_ss_level, clk_auto_generate, pixel_clk(unit in Hz) */ + lvds_attr = <1 1 0 0>; /* lvds_repack, dual_port, pn_swap, port_swap */ + phy_attr=<3 0>; /* vswing_level, preemphasis_level */ + power_on_step = <0 0 1 20 /* panel power on */ + 2 0 0 0 /* signal enable */ + 0xff 0 0 0>; /* type, index, value, delay */ + power_off_step = <2 0 0 20 /* signal disable */ + 0 0 0 100 /* panel power off */ + 0xff 0 0 0>; /* type, index, value, delay */ + backlight_index = <0>; + }; + lvds_2{ + model_name = "1080p-hfreq"; + interface = "lvds"; /* lcd_interface(lvds, vbyone) */ + basic_setting = <1920 1080 2200 1125 8 16 9>; /* h_active, v_active, h_period, v_period, lcd_bits, screen_widht, screen_height */ + lcd_timing = <44 148 0 5 30 0>; /* hs_width, hs_bp, hs_pol, vs_width, vs_bp, vs_pol */ + clk_attr = <1 0 1 0>; /* fr_adj_type(0=clock, 1=htotal, 2=vtotal), clk_ss_level, clk_auto_generate, pixel_clk(unit in Hz) */ + lvds_attr = <1 1 0 0>; /* lvds_repack, dual_port, pn_swap, port_swap */ + phy_attr=<3 0>; /* vswing_level, preemphasis_level */ + power_on_step = <0 0 1 20 /* panel power on */ + 2 0 0 0 /* signal enable */ + 0xff 0 0 0>; /* type, index, value, delay */ + power_off_step = <2 0 0 20 /* signal disable */ + 0 0 0 100 /* panel power off */ + 0xff 0 0 0>; /* type, index, value, delay */ + backlight_index = <0>; + }; + + vbyone_0{ + model_name = "public"; + interface = "vbyone"; /* lcd_interface(lvds, vbyone) */ + basic_setting = <3840 2160 4400 2250 10 16 9>; /* h_active, v_active, h_period, v_period, lcd_bits, screen_widht, screen_height */ + lcd_timing = <33 477 0 6 65 0>; /* hs_width, hs_bp, hs_pol, vs_width, vs_bp, vs_pol */ + clk_attr = <0 0 1 0>; /* fr_adj_type(0=clock, 1=htotal, 2=vtotal), clk_ss_level, clk_auto_generate, pixel_clk(unit in Hz) */ + vbyone_attr = <8 2 4 4>; /* lane_count, region_num, byte_mode, color_fmt */ + phy_attr=<3 0>; /* vswing_level, preemphasis_level */ + power_on_step = <0 0 1 50 /* panel power on */ + 2 0 0 200 /* signal enable */ + 0xff 0 0 0>; /* type, index, value, delay */ + power_off_step = <2 0 0 50 /* signal disable */ + 0 0 0 100 /* panel power off */ + 0xff 0 0 0>; /* type, index, value, delay */ + backlight_index = <0>; + }; + + vbyone_1{ + model_name = "LG_RDL550WY"; + interface = "vbyone"; /* lcd_interface(lvds, vbyone) */ + basic_setting = <3840 2160 4400 2250 10 16 9>; /* h_active, v_active, h_period, v_period, lcd_bits, screen_widht, screen_height */ + lcd_timing = <33 477 0 6 65 0>; /* hs_width, hs_bp, hs_pol, vs_width, vs_bp, vs_pol */ + clk_attr = <2 0 1 0>; /* fr_adj_type(0=clock, 1=htotal, 2=vtotal), clk_ss_level, clk_auto_generate, pixel_clk(unit in Hz) */ + vbyone_attr = <8 2 4 4>; /* lane_count, region_num, byte_mode, color_fmt */ + phy_attr=<3 0>; /* vswing_level, preemphasis_level */ + power_on_step = <0 0 1 50 /* panel power on */ + 2 0 0 0 /* signal enable */ + 0xff 0 0 0>; /* type, index, value, delay */ + power_off_step = <2 0 0 50 /* signal disable */ + 0 0 0 100 /* panel power off */ + 0xff 0 0 0>; /* type, index, value, delay */ + backlight_index = <0>; + }; + + vbyone_2{ + model_name = "INL_V580DJ2"; + interface = "vbyone"; /* lcd_interface(lvds, vbyone) */ + basic_setting = <3840 2160 4400 2250 10 16 9>; /* h_active, v_active, h_period, v_period, lcd_bits, screen_widht, screen_height */ + lcd_timing = <33 477 0 6 65 0>; /* hs_width, hs_bp, hs_pol, vs_width, vs_bp, vs_pol */ + clk_attr = <2 0 1 0>; /* fr_adj_type(0=clock, 1=htotal, 2=vtotal), clk_ss_level, clk_auto_generate, pixel_clk(unit in Hz) */ + vbyone_attr = <8 1 4 4>; /* lane_count, region_num, byte_mode, color_fmt */ + phy_attr=<3 0>; /* vswing_level, preemphasis_level */ + power_on_step = <0 0 1 50 /* panel power on */ + 2 0 0 0 /* signal enable */ + 0xff 0 0 0>; /* type, index, value, delay */ + power_off_step = <2 0 0 50 /* signal disable */ + 0 0 0 100 /* panel power off */ + 0xff 0 0 0>; /* type, index, value, delay */ + backlight_index = <0>; + }; + + vbyone_3{ + model_name = "BOE_HV550QU2"; + interface = "vbyone"; /* lcd_interface(lvds, vbyone) */ + basic_setting = <3840 2160 4400 2250 10 16 9>; /* h_active, v_active, h_period, v_period, lcd_bits, screen_widht, screen_height */ + lcd_timing = <33 477 1 6 65 0>; /* hs_width, hs_bp, hs_pol, vs_width, vs_bp, vs_pol */ + clk_attr = <2 0 1 0>; /* fr_adj_type(0=clock, 1=htotal, 2=vtotal), clk_ss_level, clk_auto_generate, pixel_clk(unit in Hz) */ + vbyone_attr = <8 2 4 4>; /* lane_count, region_num, byte_mode, color_fmt */ + phy_attr=<3 0>; /* vswing_level, preemphasis_level */ + power_on_step = <0 0 1 20 /* panel power on */ + 0 1 0 10 /* 3d_enable=0 */ + 2 0 0 0 /* signal enable */ + 0xff 0 0 0>; /* type, index, value, delay */ + power_off_step = <2 0 0 30 /* signal disable */ + 0 1 2 0 /* 3d_enable pin reset to input */ + 0 0 0 100 /* panel power off */ + 0xff 0 0 0>; /* type, index, value, delay */ + backlight_index = <0>; + }; + }; /* end of lcd */ + + lcd_extern{ + compatible = "amlogic, lcd_extern"; + dev_name = "lcd_extern"; + status = "okay"; + key_valid = <0>; + + extern_0{ + index = <0>; + extern_name = "ext_default"; + status = "disabled"; + type = <0>; /* 0=i2c, 1=spi, 2=mipi */ + i2c_address = <0x1c>; /* 7bit i2c address */ + i2c_second_address = <0xff>; /* 7bit i2c address, 0xff for none */ + i2c_bus = "i2c_bus_d"; + cmd_size = <9>; + /* init on/off: (type, value..., delay), must match cmd_size for every group */ + /* type: 0x00=cmd(bit[3:0]=1 for second_addr), 0x10=gpio, 0xff=ending*/ + /* value: i2c or spi cmd, or gpio index & level, fill 0x0 for no use */ + /* delay: unit ms */ + init_on = <0x00 0x20 0x01 0x02 0x00 0x40 0xFF 0x00 0x00 + 0x00 0x80 0x02 0x00 0x40 0x62 0x51 0x73 0x00 + 0x00 0x61 0x06 0x00 0x00 0x00 0x00 0x00 0x00 + 0x00 0xC1 0x05 0x0F 0x00 0x08 0x70 0x00 0x00 + 0x00 0x13 0x01 0x00 0x00 0x00 0x00 0x00 0x00 + 0x00 0x3D 0x02 0x01 0x00 0x00 0x00 0x00 0x00 + 0x00 0xED 0x0D 0x01 0x00 0x00 0x00 0x00 0x00 + 0x00 0x23 0x02 0x00 0x00 0x00 0x00 0x00 0x0A + 0xff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00>; + init_off = <0xff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00>; + }; + extern_1{ + index = <1>; + extern_name = "i2c_T5800Q"; + status = "disabled"; + type = <0>; /* 0=i2c, 1=spi, 2=mipi */ + i2c_address = <0x1c>; /* 7bit i2c address */ + i2c_bus = "i2c_bus_d"; + }; + }; + + backlight { + compatible = "amlogic, backlight"; + dev_name = "backlight"; + status = "disable"; + key_valid = <0>; + pinctrl-names = "pwm_on","pwm_vs_on","pwm_combo_on", + "pwm_combo_0_on","pwm_combo_1_on"; + pinctrl-0 = <&bl_pwm_on_pins>; + pinctrl-1 = <&bl_pwm_vs_on_pins>; + pinctrl-2 = <&bl_pwm_combo_0_on_pins &bl_pwm_combo_1_on_pins>; + pinctrl-3 = <&bl_pwm_combo_0_on_pins>; + pinctrl-4 = <&bl_pwm_combo_1_on_pins>; + + /* power index:(point gpios_index, 0xff=invalid) */ + /* power value:(0=output low, 1=output high, 2=input) */ + /* power delay:(unit in ms) */ + bl-gpios = <&gpio_ao GPIOAO_4 1 &gpio GPIOZ_6 1 &gpio GPIOZ_4 1>; + bl_gpio_names = "GPIOAO_4","GPIOZ_6","GPIOZ_4"; + + backlight_0{ + index = <0>; + bl_name = "backlight_pwm"; + bl_level_default_uboot_kernel = <100 100>; + bl_level_attr = <255 10 128 102>; /* max, min, mid, mid_mapping */ + + bl_ctrl_method = <1>; /* 1=pwm, 2=pwm_combo, 4=extern */ + bl_power_attr = <0 0 1 200 200>; /* en_gpio_index, on_value, off_value, on_delay, off_delay */ + + /* pwm_method: 0=negative, 1=positive */ + /* pwm_freq: pwm_vs: 1~4(vfreq multiple), other pwm: real freq(unit: Hz) */ + /* duty_max, duty_min: unit in % */ + bl_pwm_port = "PWM_B"; /* PWM_A, PWM_B, PWM_C, PWM_D, PWM_VS */ + bl_pwm_attr = <0 180 100 25>; /* pwm_method, pwm_freq, duty_max, duty_min */ + bl_pwm_power = <1 0 10 10>; /* pwm_gpio_index, pwm_gpio_off, pwm_on_delay, pwm_off_delay */ + }; + backlight_1{ + index = <1>; + bl_name = "backlight_pwm_vs"; + bl_level_default_uboot_kernel = <100 100>; + bl_level_attr = <255 10 128 102>; /* max, min, mid, mid_mapping */ + + bl_ctrl_method = <1>; /* 1=pwm, 2=pwm_combo, 4=extern */ + bl_power_attr = <0 1 0 200 200>; /* en_gpio_index, on_value, off_value, on_delay, off_delay */ + + /* pwm_method: 0=negative, 1=positive */ + /* pwm_freq: pwm_vs: 1~4(vfreq multiple), other pwm: real freq(unit: Hz) */ + /* duty_max, duty_min: unit in % */ + bl_pwm_port = "PWM_VS"; /* PWM_A, PWM_B, PWM_C, PWM_D, PWM_VS */ + bl_pwm_attr = <1 2 100 25>; /* pwm_method, pwm_freq, duty_max, duty_min */ + bl_pwm_power = <1 0 10 10>; /* pwm_gpio_index, pwm_off_value, pwm_on_delay, pwm_off_delay */ + }; + backlight_2{ + index = <2>; + bl_name = "backlight_pwm_combo"; + bl_level_default_uboot_kernel = <100 100>; + bl_level_attr = <255 10 128 102>; /* max, min, mid, mid_mapping */ + + bl_ctrl_method = <2>; /* 1=pwm, 2=pwm_combo, 4=extern */ + bl_power_attr = <0 1 0 200 200>; /* en_gpio_index, on_value, off_value, on_delay, off_delay */ + + /* pwm_method: 0=negative, 1=positive */ + /* pwm_freq: pwm_vs: 1~4(vfreq multiple), other pwm: real freq(unit: Hz) */ + /* duty_max, duty_min: unit in % */ + bl_pwm_combo_level_mapping = <255 100 100 10>; /* level_max, level_min */ + bl_pwm_combo_port = "PWM_B","PWM_D"; /* PWM_A, PWM_B, PWM_C, PWM_D, PWM_VS */ + bl_pwm_combo_attr = <1 180 100 25 + 1 18000 100 20>; /* pwm_method, pwm_freq, duty_max, duty_min */ + bl_pwm_combo_power = <1 0 2 0 10 10>; /* pwm0_gpio_index, pwm0_gpio_off, pwm1_gpio_index, pwm1_gpio_off, pwm_on_delay, pwm_off_delay */ + }; + }; /* end of backlight */ + +};/* end of / */ + diff --git a/arch/arm64/boot/dts/mesontxl.dtsi b/arch/arm64/boot/dts/mesontxl.dtsi new file mode 100644 index 0000000000000..9e1c3e7544aeb --- /dev/null +++ b/arch/arm64/boot/dts/mesontxl.dtsi @@ -0,0 +1,607 @@ +/* + * arch/arm64/boot/dts/amlogic/mesontxl.dtsi + * + * Copyright (C) 2016 Amlogic, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * +*/ + +#include +#include +#include +#include +#include +#include + +#include "mesongxbb-gpu-mali450.dtsi" + +/ { + cpus:cpus { + #address-cells = <2>; + #size-cells = <0>; + #cooling-cells = <2>; /* min followed by max */ + + cpu0:cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x0>; + enable-method = "psci"; + }; + + cpu1:cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x1>; + enable-method = "psci"; + }; + cpu2:cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x2>; + enable-method = "psci"; + }; + + cpu3:cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53","arm,armv8"; + reg = <0x0 0x3>; + enable-method = "psci"; + }; + + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = , + , + , + ; + }; + + arm_pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0 137 4>, + <0 138 4>, + <0 153 4>, + <0 154 4>; + }; + + meson_suspend:pm { + compatible = "amlogic, pm"; + device_name = "aml_pm"; + gxbaby-suspend; + reg = <0x0 0xc81000a8 0x0 0x4 + 0x0 0xc810023c 0x0 0x4>; + }; + + gic: interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <3>; + #address-cells = <0>; + interrupt-controller; + reg = <0x0 0xc4301000 0 0x1000>, + <0x0 0xc4302000 0 0x0100>; + interrupts = ; + }; + + aml_restart { + compatible = "aml, restart"; + sys_reset = <0x84000009>; + sys_poweroff = <0x84000008>; + }; + + psci { + compatible = "arm,psci"; + method = "smc"; + cpu_suspend = <0xC4000001>; + cpu_off = <0x84000002>; + cpu_on = <0xC4000003>; + migrate = <0xC4000005>; + }; + + secmon { + compatible = "amlogic, secmon"; + memory-region = <&secmon_reserved>; + in_base_func = <0x82000020>; + out_base_func = <0x82000021>; + }; + + securitykey { + compatible = "aml, securitykey"; + storage_query = <0x82000060>; + storage_read = <0x82000061>; + storage_write = <0x82000062>; + storage_tell = <0x82000063>; + storage_verify = <0x82000064>; + storage_status = <0x82000065>; + storage_list = <0x82000067>; + storage_remove = <0x82000068>; + storage_in_func = <0x82000023>; + storage_out_func = <0x82000024>; + storage_block_func = <0x82000025>; + storage_size_func = <0x82000027>; + }; + + cpu_iomap { + compatible = "amlogic, iomap"; + #address-cells=<2>; + #size-cells=<2>; + ranges; + io_cbus_base { + reg = <0x0 0xc1100000 0x0 0x100000>; + }; + io_apb_base { + reg = <0x0 0xd0000000 0x0 0x200000>; + }; + io_aobus_base { + reg = <0x0 0xc8100000 0x0 0x100000>; + }; + }; + + cpufreq-meson { + compatible = "amlogic, cpufreq-scpi"; + status = "okay"; + clocks = <&scpi_dvfs 0>; + clock-names = "cpu_clk"; + }; + + amlogic-watchdog { + compatible = "amlogic, gx-wdt"; + status = "disable"; + default_timeout=<10>; + reset_watchdog_method=<1>;//0:sysfs,1:kernel + reset_watchdog_time=<2>; + shutdown_timeout=<10>; + firmware_timeout=<6>; + suspend_timeout=<6>; + reg = <0x0 0xc11098d0 0x0 0x10>; + clocks = <&clock CLK_XTAL>; + }; + + amlogic-jtag { + compatible = "amlogic, jtag"; + status = "okay"; + pinctrl-names = "jtag_apao_pins", "jtag_apee_pins"; + pinctrl-0 = <&jtag_apao_pins>; + pinctrl-1 = <&jtag_apee_pins>; + }; + + clock: meson_clock { + compatible = "amlogic, txl-clock"; + reg = <0x0 0xc883c000 0x0 0x1000>, /* HIU BUS */ + <0x0 0xc8100000 0x0 0x1000>; /* AOBUS */ + #clock-cells = <1>; + #reset-cells = <1>; + sys_max = <1536000000>; + }; + + cpu_info { + compatible = "amlogic, cpuinfo"; + cpuinfo_cmd = <0x82000044>; + }; + + pinmux: pinmux { + compatible = "amlogic, pinmux-txl"; + dev_name = "pinmux"; + #pinmux-cells=<2>; + #address-cells = <2>; + #size-cells = <2>; + reg = <0x0 0xc1109880 0x0 0x10>; + ranges; + gpio: banks@c11080b0 { + reg = <0x0 0xc88344b0 0x0 0x28>, + <0x0 0xc88344e8 0x0 0x14>, + <0x0 0xc8834520 0x0 0x14>, + <0x0 0xc8834430 0x0 0x40>; + reg-names = "mux", "pull", "pull-enable", "gpio"; + gpio-controller; + #gpio-cells = <2>; + }; + gpio_ao: ao-bank@c1108030 { + reg = <0x0 0xc8100014 0x0 0x8>, + <0x0 0xc810002c 0x0 0x4>, + <0x0 0xc8100024 0x0 0x8>; + reg-names = "mux", "pull", "gpio"; + gpio-controller; + #gpio-cells = <2>; + }; + + avin_gpio_disable_pull:avin_gpio_disable_pull{ + amlogic,pins = "GPIODV_8","GPIODV_7"; + amlogic,enable-output=<1>; + amlogic,pullupen=<0>; + }; + + jtag_apao_pins:jtag_apao_pin{ + amlogic,clrmask = ; + amlogic,pins = "GPIOAO_3","GPIOAO_4","GPIOAO_5","GPIOAO_7"; + }; + jtag_apee_pins:jtag_apee_pin{ + amlogic,clrmask = <6 0xF000F03C>; + amlogic,pins = "CARD_0","CARD_1","CARD_2","CARD_3"; + }; + hdmitx_aocec: hdmitx_aocec { + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_7"; + }; + hdmitx_eecec: hdmitx_eecec { + amlogic,setmask=; + amlogic,clrmask=; + amlogic,pins="GPIOAO_7"; + }; + remote_pins:remote_pin{ + amlogic,setmask = ; + amlogic,clrmask = ; + amlogic,pins = "GPIOAO_6"; + }; + uart_ao_a_pins:uart_ao_a{ + amlogic,setmask = ; + amlogic,clrmask = ; + amlogic,pins="GPIOAO_0", "GPIOAO_1"; + }; + uart_ao_a_2_pins:uart_ao_a_2{ + amlogic,setmask = <6 0x300>; + amlogic,clrmask = <6 0x0C000C03>; + amlogic,pins="CARD_4", "CARD_5"; + }; + uart_ao_a_3_pins:uart_ao_a_3{ + amlogic,setmask = <6 0xC00>; + amlogic,clrmask = <6 0x0C000303>; + amlogic,pins="CARD_4", "CARD_5"; + }; + uart_ao_b_pins:uart_ao_b{ + amlogic,setmask = ; + amlogic,clrmask = ; + amlogic,pins="GPIOAO_0", "GPIOAO_1"; + }; + uart_ao_b_2_pins:uart_ao_b_2{ + amlogic,setmask = ; + amlogic,clrmask = ; + amlogic,pins="GPIOAO_4", "GPIOAO_5"; + }; + uart_a_pins:uart_a{ + amlogic,setmask=<2 0x7800>; + amlogic,clrmask=<2 0x3C00066E>; + amlogic,pins="GPIODV_8", "GPIODV_9", "GPIODV_10", "GPIODV_11"; + }; + uart_b_pins:uart_b{ + amlogic,setmask=<3 0x3000000>; + amlogic,clrmask = <4 0x60>, + <3 0x80200000>; + amlogic,pins="GPIOZ_15", "GPIOZ_16"; + }; + uart_c_pins:uart_c{ + amlogic,setmask=<4 0x3000000>; + amlogic,clrmask=<4 0xC0000000>, + <3 0x218000>; + amlogic,pins="GPIOZ_0", "GPIOZ_1"; + }; + sd_clk_cmd_pins:sd_clk_cmd_pins{ + amlogic,setmask=<6 0x0000000c>; + amlogic,pins = "CARD_2","CARD_3"; /* CARD_2:CLK, CARD_3:CMD */ + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_all_pins:sd_all_pins{ + amlogic,setmask=<6 0x0000003f>; + amlogic,clrmask=<6 0xFC00FF00>; + amlogic,pins="CARD_0","CARD_1","CARD_2","CARD_3","CARD_4","CARD_5"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_1bit_pins:sd_1bit_pins{ + amlogic,setmask=<6 0x0000001c>; + amlogic,clrmask=<6 0x70007F03>; + amlogic,pins = "CARD_1","CARD_2","CARD_3"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_clk_cmd_uart_pins:sd_clk_cmd_uart_pins{ + amlogic,setmask=<6 0x0000030c>; + amlogic,clrmask=<6 0x3C003C03>; + amlogic,pins = "CARD_2","CARD_3"; /* CARD_2:CLK, CARD_3:CMD */ + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + sd_1bit_uart_pins:sd_1bit_uart_pins{ + amlogic,setmask=<6 0x0000031c>; + amlogic,clrmask=<6 0x7C007C03>; + amlogic,pins = "CARD_1","CARD_2","CARD_3"; + amlogic,enable-output=<1>; /* 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + emmc_clk_cmd_pins:emmc_clk_cmd_pins{ + amlogic,setmask=<7 0x60000000>; + amlogic,pins = "BOOT_8","BOOT_10"; /** BOOT_10:CMD, BOOT_8:CLK */ + amlogic,enable-output=<1>; /** 0:output, 1:input */ + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + emmc_conf_pull_up:emmc_conf_pull_up{ + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_10"; + amlogic,pullup=<1>; + amlogic,pullupen=<1>; + }; + emmc_conf_pull_done:emmc_conf_pull_done{ + amlogic,pins = "BOOT_11"; + amlogic,pullup=<0>; + amlogic,pullupen=<1>; + }; + emmc_all_pins:emmc_all_pins{ + amlogic,setmask=<7 0xf0000000>; /*sdhc c*/ + amlogic,clrmask=<7 0x00F83C00>; + amlogic,pins = "BOOT_0","BOOT_1","BOOT_2","BOOT_3","BOOT_4", + "BOOT_5","BOOT_6","BOOT_7","BOOT_8","BOOT_10","BOOT_11"; + amlogic,enable-output=<1>; /** 0:output, 1:input */ + }; + atvdemod_agc: atvdemod_agc { + amlogic,setmask=<2 0x800000>; + amlogic,clrmask=<2 0x500000>; + amlogic,pins="GPIODV_2"; + }; + dtvdemod_agc: dtvdemod_agc { + amlogic,setmask=<2 0x400000>; + amlogic,clrmask=<2 0x980000>; + amlogic,pins="GPIODV_2"; + }; + i2c_a_master:i2c_a{ + amlogic,setmask=<4 0x1800>; + amlogic,clrmask=<3 0x200000>; + amlogic,pins="GPIOZ_8","GPIOZ_9"; + }; + i2c_b_master:i2c_b{ + amlogic,setmask=<2 0x03000000>; + amlogic,clrmask=<2 0x80000000>; + amlogic,pins="GPIODV_0","GPIODV_1"; + }; + i2c_c_master:i2c_c{ + amlogic,setmask=<0 0x30000000>; + amlogic,pins="GPIOH_2","GPIOH_3"; + }; + i2c_d_master:i2c_d{ + amlogic,setmask=<4 0x00300000>; + amlogic,clrmask=<4 0x30c00000 3 0x00006000>; + amlogic,pins="GPIOZ_2","GPIOZ_3"; + }; + lcd_vbyone_pins:lcd_vbyone_pin { + amlogic,setmask = <0 0xC0000000>; + amlogic,pins = "GPIOH_0","GPIOH_1"; + }; + }; /* end of pinmux */ + + cpu_version { + reg=<0x0 0xc8100220 0x0 0x4>; + }; + + meson_clk_msr { + compatible = "amlogic, txl_measure"; + reg = <0x0 0xc110875c 0x0 0x4 + 0x0 0xc1108764 0x0 0x4>; + }; + + i2c_a: i2c@c1108500 { /*I2C-A*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-A"; + status = "disabled"; + reg = <0x0 0xc1108500 0x0 0x20>; + device_id = <1>; + pinctrl-names="default"; + pinctrl-0=<&i2c_a_master>;/*p200 i2c-A multiplex with usb PWR*/ + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + + i2c_b: i2c@c11087c0 { /*I2C-B*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-B"; + status = "disabled"; + reg = <0x0 0xc11087c0 0x0 0x20>; + device_id = <2>; + pinctrl-names="default"; + pinctrl-0=<&i2c_b_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + + i2c_c: i2c@c11087e0 { /*I2C-C*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-C"; + status = "disabled"; + reg = <0x0 0xc11087e0 0x0 0x20>; + device_id = <3>; + pinctrl-names="default"; + pinctrl-0=<&i2c_c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + + i2c_d: i2c@c1108d20 { /*I2C-D*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-D"; + status = "disabled"; + reg = <0x0 0xc1108d20 0x0 0x20>; + device_id = <4>; + pinctrl-names="default"; + pinctrl-0=<&i2c_d_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clock CLK_81>; + clock-names = "clk_i2c"; + resets = <&clock GCLK_IDX_I2C>; + }; + + efuse: efuse { + compatible = "amlogic, efuse"; + read_cmd = <0x82000030>; + write_cmd = <0x82000031>; + get_max_cmd = <0x82000033>; + key = <&efusekey>; + resets = <&clock GCLK_IDX_EFUSE>; + reset-names = "efuse_clk"; + status = "disabled"; + }; + + efusekey:efusekey { + keynum = <4>; + key0 = <&key0>; + key1 = <&key1>; + key2 = <&key2>; + key3 = <&key3>; + key0:key0{ + keyname = "mac"; + offset = <0>; + size = <6>; + }; + key1:key1{ + keyname = "mac_bt"; + offset = <6>; + size = <6>; + }; + key2:key2{ + keyname = "mac_wifi"; + offset = <12>; + size = <6>; + }; + key3:key3{ + keyname = "usid"; + offset = <18>; + size = <16>; + }; + }; + + mailbox: mhu@c883c400 { + compatible = "amlogic, meson_mhu"; + reg = <0x0 0xc883c400 0x0 0x4c>, /* MHU registers */ + <0x0 0xc8013000 0x0 0x800>; /* Payload area */ + interrupts = <0 209 IRQ_TYPE_EDGE_RISING>, /* low priority interrupt */ + <0 210 IRQ_TYPE_EDGE_RISING>; /* high priority interrupt */ + #mbox-cells = <1>; + mbox-names = "cpu_to_scp_low", "cpu_to_scp_high"; + mboxes = <&mailbox 0 &mailbox 1>; + }; + + scpi_clocks { + compatible = "arm,scpi-clks"; + + scpi_dvfs: scpi_clocks@0 { + compatible = "arm,scpi-clk-indexed"; + #clock-cells = <1>; + clock-indices = <0>; + clock-output-names = "vcpu"; + }; + + }; + + meson-remote { + compatible = "amlogic, aml_remote"; + dev_name = "meson-remote"; + status = "okay"; + remote_ao_offset = <0x580>; /* 0x400 + (0x20 + idx)<<2 -- old ; 0x400 + (0x60 +idx)<<2 --new */ + interrupts = <0 196 1>; + pinctrl-names = "default"; + pinctrl-0 = <&remote_pins>; + }; + + rng { + compatible = "amlogic,meson-rng"; + reg = <0x0 0xc8834000 0x0 0x4>; + }; + + audio_data:audio_data { + compatible = "amlogic, audio_data"; + query_licence_cmd = <0x82000050>; + status = "disabled"; + }; + + saradc: saradc { + compatible = "amlogic, saradc"; + status = "okay"; + interrupts = <0 9 1>; + interrupt-names = "saradc_int"; + clocks = <&clock CLK_XTAL>; + clock-names = "saradc_clk"; + resets = <&clock GCLK_IDX_SARADC>; + reg = <0x0 0xc1108680 0x0 0x30 + 0x0 0xc883c3d8 0x0 0x08>; + }; + + defendkey: defendkey { + compatible = "amlogic, defendkey"; + reg = <0x0 0xc8834500 0x0 0x4>; /*RAND64_ADDR0*/ + mem_size = <0x0 0x100000>; + status = "disabled"; + }; + + spicc:spicc { + compatible = "amlogic, spicc"; + status = "disabled"; + reg = <0x0 0xc1108d80 0x0 0x28>; + resets = <&clock GCLK_IDX_SPICC>; + clocks = <&clock CLK_81>; + clock-names = "spicc_clk"; + interrupts = <0 81 1>; + device_id = <0>; + }; + + aml_aes { + compatible = "amlogic,aes_dma"; + dev_name = "aml_aes_dma"; + interrupts = <0 188 1 + 0 189 1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + aml_tdes { + compatible = "amlogic,des_dma,tdes_dma"; + dev_name = "aml_tdes_dma"; + interrupts = <0 188 1 + 0 189 1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + + aml_sha { + compatible = "amlogic,sha_dma"; + dev_name = "aml_sha_dma"; + interrupts = <0 188 1 + 0 189 1>; + reg = <0x0 0xc883e000 0x0 0x28>; + }; + +};/* end of / */ + +&gpu{ +/*gpu max freq is 750M*/ + tbl = <&clk125_cfg &clk285_cfg &clk400_cfg &clk500_cfg &clk666_cfg &clk750_cfg &clk750_cfg>; +}; diff --git a/arch/arm64/boot/dts/partitions-multios.dtsi b/arch/arm64/boot/dts/partitions-multios.dtsi new file mode 100644 index 0000000000000..ba71a19503438 --- /dev/null +++ b/arch/arm64/boot/dts/partitions-multios.dtsi @@ -0,0 +1,95 @@ +/* + * arch/arm64/boot/dts/partitions-dualos.dtsi + * Partitions for Android OS + Linux Distro(i.e. Ubuntu) + * + * Copyright (C) 2017 Khadsa.com All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * +*/ + +/ { + partitions: partitions{ + parts = <11>; + part-0 = <&recovery>; + part-1 = <&rsv>; + part-2 = <&tee>; + part-3 = <&crypt>; + part-4 = <&misc>; + part-5 = <&boot>; + part-6 = <&system>; + part-7 = <&cache>; + part-8 = <&libreelec>; + part-9 = <&linux>; + part-10 = <&data>; + + recovery:recovery{ + pname = "recovery"; + size = <0x0 0x2000000>; + mask = <1>; + }; + rsv:rsv{ + pname = "rsv"; + size = <0x0 0x800000>; + mask = <1>; + }; + tee:tee{ + pname = "tee"; + size = <0x0 0x800000>; + mask = <1>; + }; + crypt:crypt{ + pname = "crypt"; + size = <0x0 0x2000000>; + mask = <1>; + }; + misc:misc{ + pname = "misc"; + size = <0x0 0x2000000>; + mask = <1>; + }; + boot:boot + { + pname = "boot"; + size = <0x0 0x2000000>; + mask = <1>; + }; + system:system + { + pname = "system"; + size = <0x0 0x80000000>; + mask = <1>; + }; + cache:cache + { + pname = "cache"; + size = <0x0 0x20000000>; + mask = <2>; + }; + libreelec:libreelec { + pname = "libreelec"; + size = <0x0 0x20000000>; + mask = <1>; + }; + linux:linux { + pname = "linux"; + size = <0x0 0xfffffe00>; + mask = <4>; + }; + data:data + { + pname = "data"; +// size = <0x0 0x68C00000>; + size = <0xffffffff 0xffffffff>; + mask = <4>; + }; + }; +}; diff --git a/arch/arm64/boot/dts/rtsm_ve-aemv8a.dts b/arch/arm64/boot/dts/rtsm_ve-aemv8a.dts deleted file mode 100644 index f76eb9024a322..0000000000000 --- a/arch/arm64/boot/dts/rtsm_ve-aemv8a.dts +++ /dev/null @@ -1,161 +0,0 @@ -/* - * ARM Ltd. Fast Models - * - * Architecture Envelope Model (AEM) ARMv8-A - * ARMAEMv8AMPCT - * - * RTSM_VE_AEMv8A.lisa - */ - -/dts-v1/; - -/memreserve/ 0x80000000 0x00010000; - -/ { - model = "RTSM_VE_AEMv8A"; - compatible = "arm,rtsm_ve,aemv8a", "arm,vexpress"; - interrupt-parent = <&gic>; - #address-cells = <2>; - #size-cells = <2>; - - chosen { }; - - aliases { - serial0 = &v2m_serial0; - serial1 = &v2m_serial1; - serial2 = &v2m_serial2; - serial3 = &v2m_serial3; - }; - - cpus { - #address-cells = <2>; - #size-cells = <0>; - - cpu@0 { - device_type = "cpu"; - compatible = "arm,armv8"; - reg = <0x0 0x0>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x8000fff8>; - }; - cpu@1 { - device_type = "cpu"; - compatible = "arm,armv8"; - reg = <0x0 0x1>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x8000fff8>; - }; - cpu@2 { - device_type = "cpu"; - compatible = "arm,armv8"; - reg = <0x0 0x2>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x8000fff8>; - }; - cpu@3 { - device_type = "cpu"; - compatible = "arm,armv8"; - reg = <0x0 0x3>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x8000fff8>; - }; - }; - - memory@80000000 { - device_type = "memory"; - reg = <0x00000000 0x80000000 0 0x80000000>, - <0x00000008 0x80000000 0 0x80000000>; - }; - - gic: interrupt-controller@2c001000 { - compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; - #interrupt-cells = <3>; - #address-cells = <0>; - interrupt-controller; - reg = <0x0 0x2c001000 0 0x1000>, - <0x0 0x2c002000 0 0x1000>, - <0x0 0x2c004000 0 0x2000>, - <0x0 0x2c006000 0 0x2000>; - interrupts = <1 9 0xf04>; - }; - - timer { - compatible = "arm,armv8-timer"; - interrupts = <1 13 0xff01>, - <1 14 0xff01>, - <1 11 0xff01>, - <1 10 0xff01>; - clock-frequency = <100000000>; - }; - - pmu { - compatible = "arm,armv8-pmuv3"; - interrupts = <0 60 4>, - <0 61 4>, - <0 62 4>, - <0 63 4>; - }; - - smb { - compatible = "simple-bus"; - - #address-cells = <2>; - #size-cells = <1>; - ranges = <0 0 0 0x08000000 0x04000000>, - <1 0 0 0x14000000 0x04000000>, - <2 0 0 0x18000000 0x04000000>, - <3 0 0 0x1c000000 0x04000000>, - <4 0 0 0x0c000000 0x04000000>, - <5 0 0 0x10000000 0x04000000>; - - #interrupt-cells = <1>; - interrupt-map-mask = <0 0 63>; - interrupt-map = <0 0 0 &gic 0 0 4>, - <0 0 1 &gic 0 1 4>, - <0 0 2 &gic 0 2 4>, - <0 0 3 &gic 0 3 4>, - <0 0 4 &gic 0 4 4>, - <0 0 5 &gic 0 5 4>, - <0 0 6 &gic 0 6 4>, - <0 0 7 &gic 0 7 4>, - <0 0 8 &gic 0 8 4>, - <0 0 9 &gic 0 9 4>, - <0 0 10 &gic 0 10 4>, - <0 0 11 &gic 0 11 4>, - <0 0 12 &gic 0 12 4>, - <0 0 13 &gic 0 13 4>, - <0 0 14 &gic 0 14 4>, - <0 0 15 &gic 0 15 4>, - <0 0 16 &gic 0 16 4>, - <0 0 17 &gic 0 17 4>, - <0 0 18 &gic 0 18 4>, - <0 0 19 &gic 0 19 4>, - <0 0 20 &gic 0 20 4>, - <0 0 21 &gic 0 21 4>, - <0 0 22 &gic 0 22 4>, - <0 0 23 &gic 0 23 4>, - <0 0 24 &gic 0 24 4>, - <0 0 25 &gic 0 25 4>, - <0 0 26 &gic 0 26 4>, - <0 0 27 &gic 0 27 4>, - <0 0 28 &gic 0 28 4>, - <0 0 29 &gic 0 29 4>, - <0 0 30 &gic 0 30 4>, - <0 0 31 &gic 0 31 4>, - <0 0 32 &gic 0 32 4>, - <0 0 33 &gic 0 33 4>, - <0 0 34 &gic 0 34 4>, - <0 0 35 &gic 0 35 4>, - <0 0 36 &gic 0 36 4>, - <0 0 37 &gic 0 37 4>, - <0 0 38 &gic 0 38 4>, - <0 0 39 &gic 0 39 4>, - <0 0 40 &gic 0 40 4>, - <0 0 41 &gic 0 41 4>, - <0 0 42 &gic 0 42 4>; - - /include/ "rtsm_ve-motherboard.dtsi" - }; -}; - -/include/ "clcd-panels.dtsi" diff --git a/arch/arm64/boot/dts/rtsm_ve-motherboard.dtsi b/arch/arm64/boot/dts/rtsm_ve-motherboard.dtsi deleted file mode 100644 index b683d47035820..0000000000000 --- a/arch/arm64/boot/dts/rtsm_ve-motherboard.dtsi +++ /dev/null @@ -1,243 +0,0 @@ -/* - * ARM Ltd. Fast Models - * - * Versatile Express (VE) system model - * Motherboard component - * - * VEMotherBoard.lisa - */ - - motherboard { - arm,v2m-memory-map = "rs1"; - compatible = "arm,vexpress,v2m-p1", "simple-bus"; - #address-cells = <2>; /* SMB chipselect number and offset */ - #size-cells = <1>; - #interrupt-cells = <1>; - ranges; - - flash@0,00000000 { - compatible = "arm,vexpress-flash", "cfi-flash"; - reg = <0 0x00000000 0x04000000>, - <4 0x00000000 0x04000000>; - bank-width = <4>; - }; - - vram@2,00000000 { - compatible = "arm,vexpress-vram"; - reg = <2 0x00000000 0x00800000>; - }; - - ethernet@2,02000000 { - compatible = "smsc,lan91c111"; - reg = <2 0x02000000 0x10000>; - interrupts = <15>; - }; - - v2m_clk24mhz: clk24mhz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <24000000>; - clock-output-names = "v2m:clk24mhz"; - }; - - v2m_refclk1mhz: refclk1mhz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <1000000>; - clock-output-names = "v2m:refclk1mhz"; - }; - - v2m_refclk32khz: refclk32khz { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <32768>; - clock-output-names = "v2m:refclk32khz"; - }; - - iofpga@3,00000000 { - compatible = "arm,amba-bus", "simple-bus"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 3 0 0x200000>; - - v2m_sysreg: sysreg@010000 { - compatible = "arm,vexpress-sysreg"; - reg = <0x010000 0x1000>; - gpio-controller; - #gpio-cells = <2>; - }; - - v2m_sysctl: sysctl@020000 { - compatible = "arm,sp810", "arm,primecell"; - reg = <0x020000 0x1000>; - clocks = <&v2m_refclk32khz>, <&v2m_refclk1mhz>, <&v2m_clk24mhz>; - clock-names = "refclk", "timclk", "apb_pclk"; - #clock-cells = <1>; - clock-output-names = "timerclken0", "timerclken1", "timerclken2", "timerclken3"; - }; - - aaci@040000 { - compatible = "arm,pl041", "arm,primecell"; - reg = <0x040000 0x1000>; - interrupts = <11>; - clocks = <&v2m_clk24mhz>; - clock-names = "apb_pclk"; - }; - - mmci@050000 { - compatible = "arm,pl180", "arm,primecell"; - reg = <0x050000 0x1000>; - interrupts = <9 10>; - cd-gpios = <&v2m_sysreg 0 0>; - wp-gpios = <&v2m_sysreg 1 0>; - max-frequency = <12000000>; - vmmc-supply = <&v2m_fixed_3v3>; - clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; - clock-names = "mclk", "apb_pclk"; - }; - - kmi@060000 { - compatible = "arm,pl050", "arm,primecell"; - reg = <0x060000 0x1000>; - interrupts = <12>; - clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; - clock-names = "KMIREFCLK", "apb_pclk"; - }; - - kmi@070000 { - compatible = "arm,pl050", "arm,primecell"; - reg = <0x070000 0x1000>; - interrupts = <13>; - clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; - clock-names = "KMIREFCLK", "apb_pclk"; - }; - - v2m_serial0: uart@090000 { - compatible = "arm,pl011", "arm,primecell"; - reg = <0x090000 0x1000>; - interrupts = <5>; - clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; - clock-names = "uartclk", "apb_pclk"; - }; - - v2m_serial1: uart@0a0000 { - compatible = "arm,pl011", "arm,primecell"; - reg = <0x0a0000 0x1000>; - interrupts = <6>; - clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; - clock-names = "uartclk", "apb_pclk"; - }; - - v2m_serial2: uart@0b0000 { - compatible = "arm,pl011", "arm,primecell"; - reg = <0x0b0000 0x1000>; - interrupts = <7>; - clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; - clock-names = "uartclk", "apb_pclk"; - }; - - v2m_serial3: uart@0c0000 { - compatible = "arm,pl011", "arm,primecell"; - reg = <0x0c0000 0x1000>; - interrupts = <8>; - clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; - clock-names = "uartclk", "apb_pclk"; - }; - - wdt@0f0000 { - compatible = "arm,sp805", "arm,primecell"; - reg = <0x0f0000 0x1000>; - interrupts = <0>; - clocks = <&v2m_refclk32khz>, <&v2m_clk24mhz>; - clock-names = "wdogclk", "apb_pclk"; - }; - - v2m_timer01: timer@110000 { - compatible = "arm,sp804", "arm,primecell"; - reg = <0x110000 0x1000>; - interrupts = <2>; - clocks = <&v2m_sysctl 0>, <&v2m_sysctl 1>, <&v2m_clk24mhz>; - clock-names = "timclken1", "timclken2", "apb_pclk"; - }; - - v2m_timer23: timer@120000 { - compatible = "arm,sp804", "arm,primecell"; - reg = <0x120000 0x1000>; - interrupts = <3>; - clocks = <&v2m_sysctl 2>, <&v2m_sysctl 3>, <&v2m_clk24mhz>; - clock-names = "timclken1", "timclken2", "apb_pclk"; - }; - - rtc@170000 { - compatible = "arm,pl031", "arm,primecell"; - reg = <0x170000 0x1000>; - interrupts = <4>; - clocks = <&v2m_clk24mhz>; - clock-names = "apb_pclk"; - }; - - clcd@1f0000 { - compatible = "arm,pl111", "arm,primecell"; - reg = <0x1f0000 0x1000>; - interrupts = <14>; - clocks = <&v2m_oscclk1>, <&v2m_clk24mhz>; - clock-names = "clcdclk", "apb_pclk"; - mode = "XVGA"; - use_dma = <0>; - framebuffer = <0x18000000 0x00180000>; - }; - - virtio_block@0130000 { - compatible = "virtio,mmio"; - reg = <0x130000 0x200>; - interrupts = <42>; - }; - }; - - v2m_fixed_3v3: fixedregulator@0 { - compatible = "regulator-fixed"; - regulator-name = "3V3"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-always-on; - }; - - mcc { - compatible = "arm,vexpress,config-bus", "simple-bus"; - arm,vexpress,config-bridge = <&v2m_sysreg>; - - v2m_oscclk1: osc@1 { - /* CLCD clock */ - compatible = "arm,vexpress-osc"; - arm,vexpress-sysreg,func = <1 1>; - freq-range = <23750000 63500000>; - #clock-cells = <0>; - clock-output-names = "v2m:oscclk1"; - }; - - reset@0 { - compatible = "arm,vexpress-reset"; - arm,vexpress-sysreg,func = <5 0>; - }; - - muxfpga@0 { - compatible = "arm,vexpress-muxfpga"; - arm,vexpress-sysreg,func = <7 0>; - }; - - shutdown@0 { - compatible = "arm,vexpress-shutdown"; - arm,vexpress-sysreg,func = <8 0>; - }; - - reboot@0 { - compatible = "arm,vexpress-reboot"; - arm,vexpress-sysreg,func = <9 0>; - }; - - dvimode@0 { - compatible = "arm,vexpress-dvimode"; - arm,vexpress-sysreg,func = <11 0>; - }; - }; - }; diff --git a/arch/arm64/boot/dts/skeleton.dtsi b/arch/arm64/boot/dts/skeleton.dtsi deleted file mode 100644 index 38ead821bb425..0000000000000 --- a/arch/arm64/boot/dts/skeleton.dtsi +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Skeleton device tree; the bare minimum needed to boot; just include and - * add a compatible value. The bootloader will typically populate the memory - * node. - */ - -/ { - #address-cells = <2>; - #size-cells = <1>; - chosen { }; - aliases { }; - memory { device_type = "memory"; reg = <0 0 0>; }; -}; diff --git a/fs/overlayfs/Kconfig b/fs/overlayfs/Kconfig new file mode 100644 index 0000000000000..34355818a2e03 --- /dev/null +++ b/fs/overlayfs/Kconfig @@ -0,0 +1,10 @@ +config OVERLAY_FS + tristate "Overlay filesystem support" + help + An overlay filesystem combines two filesystems - an 'upper' filesystem + and a 'lower' filesystem. When a name exists in both filesystems, the + object in the 'upper' filesystem is visible while the object in the + 'lower' filesystem is either hidden or, in the case of directories, + merged with the 'upper' object. + + For more information see Documentation/filesystems/overlayfs.txt diff --git a/fs/overlayfs/Makefile b/fs/overlayfs/Makefile new file mode 100644 index 0000000000000..900daed3e91d2 --- /dev/null +++ b/fs/overlayfs/Makefile @@ -0,0 +1,7 @@ +# +# Makefile for the overlay filesystem. +# + +obj-$(CONFIG_OVERLAY_FS) += overlay.o + +overlay-objs := super.o inode.o dir.o readdir.o copy_up.o diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c new file mode 100644 index 0000000000000..24f640441bd90 --- /dev/null +++ b/fs/overlayfs/copy_up.c @@ -0,0 +1,413 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "overlayfs.h" + +#define OVL_COPY_UP_CHUNK_SIZE (1 << 20) + +int ovl_copy_xattr(struct dentry *old, struct dentry *new) +{ + ssize_t list_size, size; + char *buf, *name, *value; + int error; + + if (!old->d_inode->i_op->getxattr || + !new->d_inode->i_op->getxattr) + return 0; + + list_size = vfs_listxattr(old, NULL, 0); + if (list_size <= 0) { + if (list_size == -EOPNOTSUPP) + return 0; + return list_size; + } + + buf = kzalloc(list_size, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + error = -ENOMEM; + value = kmalloc(XATTR_SIZE_MAX, GFP_KERNEL); + if (!value) + goto out; + + list_size = vfs_listxattr(old, buf, list_size); + if (list_size <= 0) { + error = list_size; + goto out_free_value; + } + + for (name = buf; name < (buf + list_size); name += strlen(name) + 1) { + size = vfs_getxattr(old, name, value, XATTR_SIZE_MAX); + if (size <= 0) { + error = size; + goto out_free_value; + } + error = vfs_setxattr(new, name, value, size, 0); + if (error) + goto out_free_value; + } + +out_free_value: + kfree(value); +out: + kfree(buf); + return error; +} + +static int ovl_copy_up_data(struct path *old, struct path *new, loff_t len) +{ + struct file *old_file; + struct file *new_file; + loff_t old_pos = 0; + loff_t new_pos = 0; + int error = 0; + + if (len == 0) + return 0; + + old_file = ovl_path_open(old, O_RDONLY); + if (IS_ERR(old_file)) + return PTR_ERR(old_file); + + new_file = ovl_path_open(new, O_WRONLY); + if (IS_ERR(new_file)) { + error = PTR_ERR(new_file); + goto out_fput; + } + + /* FIXME: copy up sparse files efficiently */ + while (len) { + size_t this_len = OVL_COPY_UP_CHUNK_SIZE; + long bytes; + + if (len < this_len) + this_len = len; + + if (signal_pending_state(TASK_KILLABLE, current)) { + error = -EINTR; + break; + } + + bytes = do_splice_direct(old_file, &old_pos, + new_file, &new_pos, + this_len, SPLICE_F_MOVE); + if (bytes <= 0) { + error = bytes; + break; + } + WARN_ON(old_pos != new_pos); + + len -= bytes; + } + + fput(new_file); +out_fput: + fput(old_file); + return error; +} + +static char *ovl_read_symlink(struct dentry *realdentry) +{ + int res; + char *buf; + struct inode *inode = realdentry->d_inode; + mm_segment_t old_fs; + + res = -EINVAL; + if (!inode->i_op->readlink) + goto err; + + res = -ENOMEM; + buf = (char *) __get_free_page(GFP_KERNEL); + if (!buf) + goto err; + + old_fs = get_fs(); + set_fs(get_ds()); + /* The cast to a user pointer is valid due to the set_fs() */ + res = inode->i_op->readlink(realdentry, + (char __user *)buf, PAGE_SIZE - 1); + set_fs(old_fs); + if (res < 0) { + free_page((unsigned long) buf); + goto err; + } + buf[res] = '\0'; + + return buf; + +err: + return ERR_PTR(res); +} + +static int ovl_set_timestamps(struct dentry *upperdentry, struct kstat *stat) +{ + struct iattr attr = { + .ia_valid = + ATTR_ATIME | ATTR_MTIME | ATTR_ATIME_SET | ATTR_MTIME_SET, + .ia_atime = stat->atime, + .ia_mtime = stat->mtime, + }; + + return notify_change(upperdentry, &attr, NULL); +} + +int ovl_set_attr(struct dentry *upperdentry, struct kstat *stat) +{ + int err = 0; + + if (!S_ISLNK(stat->mode)) { + struct iattr attr = { + .ia_valid = ATTR_MODE, + .ia_mode = stat->mode, + }; + err = notify_change(upperdentry, &attr, NULL); + } + if (!err) { + struct iattr attr = { + .ia_valid = ATTR_UID | ATTR_GID, + .ia_uid = stat->uid, + .ia_gid = stat->gid, + }; + err = notify_change(upperdentry, &attr, NULL); + } + if (!err) + ovl_set_timestamps(upperdentry, stat); + + return err; +} + +static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir, + struct dentry *dentry, struct path *lowerpath, + struct kstat *stat, struct iattr *attr, + const char *link) +{ + struct inode *wdir = workdir->d_inode; + struct inode *udir = upperdir->d_inode; + struct dentry *newdentry = NULL; + struct dentry *upper = NULL; + umode_t mode = stat->mode; + int err; + + newdentry = ovl_lookup_temp(workdir, dentry); + err = PTR_ERR(newdentry); + if (IS_ERR(newdentry)) + goto out; + + upper = lookup_one_len(dentry->d_name.name, upperdir, + dentry->d_name.len); + err = PTR_ERR(upper); + if (IS_ERR(upper)) + goto out1; + + /* Can't properly set mode on creation because of the umask */ + stat->mode &= S_IFMT; + err = ovl_create_real(wdir, newdentry, stat, link, NULL, true); + stat->mode = mode; + if (err) + goto out2; + + if (S_ISREG(stat->mode)) { + struct path upperpath; + ovl_path_upper(dentry, &upperpath); + BUG_ON(upperpath.dentry != NULL); + upperpath.dentry = newdentry; + + err = ovl_copy_up_data(lowerpath, &upperpath, stat->size); + if (err) + goto out_cleanup; + } + + err = ovl_copy_xattr(lowerpath->dentry, newdentry); + if (err) + goto out_cleanup; + + mutex_lock(&newdentry->d_inode->i_mutex); + err = ovl_set_attr(newdentry, stat); + if (!err && attr) + err = notify_change(newdentry, attr, NULL); + mutex_unlock(&newdentry->d_inode->i_mutex); + if (err) + goto out_cleanup; + + err = ovl_do_rename(wdir, newdentry, udir, upper, 0); + if (err) + goto out_cleanup; + + ovl_dentry_update(dentry, newdentry); + newdentry = NULL; + + /* + * Non-directores become opaque when copied up. + */ + if (!S_ISDIR(stat->mode)) + ovl_dentry_set_opaque(dentry, true); +out2: + dput(upper); +out1: + dput(newdentry); +out: + return err; + +out_cleanup: + ovl_cleanup(wdir, newdentry); + goto out; +} + +/* + * Copy up a single dentry + * + * Directory renames only allowed on "pure upper" (already created on + * upper filesystem, never copied up). Directories which are on lower or + * are merged may not be renamed. For these -EXDEV is returned and + * userspace has to deal with it. This means, when copying up a + * directory we can rely on it and ancestors being stable. + * + * Non-directory renames start with copy up of source if necessary. The + * actual rename will only proceed once the copy up was successful. Copy + * up uses upper parent i_mutex for exclusion. Since rename can change + * d_parent it is possible that the copy up will lock the old parent. At + * that point the file will have already been copied up anyway. + */ +int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, + struct path *lowerpath, struct kstat *stat, + struct iattr *attr) +{ + struct dentry *workdir = ovl_workdir(dentry); + int err; + struct kstat pstat; + struct path parentpath; + struct dentry *upperdir; + struct dentry *upperdentry; + const struct cred *old_cred; + struct cred *override_cred; + char *link = NULL; + + ovl_path_upper(parent, &parentpath); + upperdir = parentpath.dentry; + + err = vfs_getattr(&parentpath, &pstat); + if (err) + return err; + + if (S_ISLNK(stat->mode)) { + link = ovl_read_symlink(lowerpath->dentry); + if (IS_ERR(link)) + return PTR_ERR(link); + } + + err = -ENOMEM; + override_cred = prepare_creds(); + if (!override_cred) + goto out_free_link; + + override_cred->fsuid = stat->uid; + override_cred->fsgid = stat->gid; + /* + * CAP_SYS_ADMIN for copying up extended attributes + * CAP_DAC_OVERRIDE for create + * CAP_FOWNER for chmod, timestamp update + * CAP_FSETID for chmod + * CAP_CHOWN for chown + * CAP_MKNOD for mknod + */ + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); + cap_raise(override_cred->cap_effective, CAP_FOWNER); + cap_raise(override_cred->cap_effective, CAP_FSETID); + cap_raise(override_cred->cap_effective, CAP_CHOWN); + cap_raise(override_cred->cap_effective, CAP_MKNOD); + old_cred = override_creds(override_cred); + + err = -EIO; + if (lock_rename(workdir, upperdir) != NULL) { + pr_err("overlayfs: failed to lock workdir+upperdir\n"); + goto out_unlock; + } + upperdentry = ovl_dentry_upper(dentry); + if (upperdentry) { + unlock_rename(workdir, upperdir); + err = 0; + /* Raced with another copy-up? Do the setattr here */ + if (attr) { + mutex_lock(&upperdentry->d_inode->i_mutex); + err = notify_change(upperdentry, attr, NULL); + mutex_unlock(&upperdentry->d_inode->i_mutex); + } + goto out_put_cred; + } + + err = ovl_copy_up_locked(workdir, upperdir, dentry, lowerpath, + stat, attr, link); + if (!err) { + /* Restore timestamps on parent (best effort) */ + ovl_set_timestamps(upperdir, &pstat); + } +out_unlock: + unlock_rename(workdir, upperdir); +out_put_cred: + revert_creds(old_cred); + put_cred(override_cred); + +out_free_link: + if (link) + free_page((unsigned long) link); + + return err; +} + +int ovl_copy_up(struct dentry *dentry) +{ + int err; + + err = 0; + while (!err) { + struct dentry *next; + struct dentry *parent; + struct path lowerpath; + struct kstat stat; + enum ovl_path_type type = ovl_path_type(dentry); + + if (OVL_TYPE_UPPER(type)) + break; + + next = dget(dentry); + /* find the topmost dentry not yet copied up */ + for (;;) { + parent = dget_parent(next); + + type = ovl_path_type(parent); + if (OVL_TYPE_UPPER(type)) + break; + + dput(next); + next = parent; + } + + ovl_path_lower(next, &lowerpath); + err = vfs_getattr(&lowerpath, &stat); + if (!err) + err = ovl_copy_up_one(parent, next, &lowerpath, &stat, NULL); + + dput(parent); + dput(next); + } + + return err; +} diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c new file mode 100644 index 0000000000000..0dc4c33a0a1bf --- /dev/null +++ b/fs/overlayfs/dir.c @@ -0,0 +1,928 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include "overlayfs.h" + +void ovl_cleanup(struct inode *wdir, struct dentry *wdentry) +{ + int err; + + dget(wdentry); + if (S_ISDIR(wdentry->d_inode->i_mode)) + err = ovl_do_rmdir(wdir, wdentry); + else + err = ovl_do_unlink(wdir, wdentry); + dput(wdentry); + + if (err) { + pr_err("overlayfs: cleanup of '%pd2' failed (%i)\n", + wdentry, err); + } +} + +struct dentry *ovl_lookup_temp(struct dentry *workdir, struct dentry *dentry) +{ + struct dentry *temp; + char name[20]; + + snprintf(name, sizeof(name), "#%lx", (unsigned long) dentry); + + temp = lookup_one_len(name, workdir, strlen(name)); + if (!IS_ERR(temp) && temp->d_inode) { + pr_err("overlayfs: workdir/%s already exists\n", name); + dput(temp); + temp = ERR_PTR(-EIO); + } + + return temp; +} + +/* caller holds i_mutex on workdir */ +static struct dentry *ovl_whiteout(struct dentry *workdir, + struct dentry *dentry) +{ + int err; + struct dentry *whiteout; + struct inode *wdir = workdir->d_inode; + + whiteout = ovl_lookup_temp(workdir, dentry); + if (IS_ERR(whiteout)) + return whiteout; + + err = ovl_do_whiteout(wdir, whiteout); + if (err) { + dput(whiteout); + whiteout = ERR_PTR(err); + } + + return whiteout; +} + +int ovl_create_real(struct inode *dir, struct dentry *newdentry, + struct kstat *stat, const char *link, + struct dentry *hardlink, bool debug) +{ + int err; + + if (newdentry->d_inode) + return -ESTALE; + + if (hardlink) { + err = ovl_do_link(hardlink, dir, newdentry, debug); + } else { + switch (stat->mode & S_IFMT) { + case S_IFREG: + err = ovl_do_create(dir, newdentry, stat->mode, debug); + break; + + case S_IFDIR: + err = ovl_do_mkdir(dir, newdentry, stat->mode, debug); + break; + + case S_IFCHR: + case S_IFBLK: + case S_IFIFO: + case S_IFSOCK: + err = ovl_do_mknod(dir, newdentry, + stat->mode, stat->rdev, debug); + break; + + case S_IFLNK: + err = ovl_do_symlink(dir, newdentry, link, debug); + break; + + default: + err = -EPERM; + } + } + if (!err && WARN_ON(!newdentry->d_inode)) { + /* + * Not quite sure if non-instantiated dentry is legal or not. + * VFS doesn't seem to care so check and warn here. + */ + err = -ENOENT; + } + return err; +} + +static int ovl_set_opaque(struct dentry *upperdentry) +{ + return ovl_do_setxattr(upperdentry, OVL_XATTR_OPAQUE, "y", 1, 0); +} + +static void ovl_remove_opaque(struct dentry *upperdentry) +{ + int err; + + err = ovl_do_removexattr(upperdentry, OVL_XATTR_OPAQUE); + if (err) { + pr_warn("overlayfs: failed to remove opaque from '%s' (%i)\n", + upperdentry->d_name.name, err); + } +} + +static int ovl_dir_getattr(struct vfsmount *mnt, struct dentry *dentry, + struct kstat *stat) +{ + int err; + enum ovl_path_type type; + struct path realpath; + + type = ovl_path_real(dentry, &realpath); + err = vfs_getattr(&realpath, stat); + if (err) + return err; + + stat->dev = dentry->d_sb->s_dev; + stat->ino = dentry->d_inode->i_ino; + + /* + * It's probably not worth it to count subdirs to get the + * correct link count. nlink=1 seems to pacify 'find' and + * other utilities. + */ + if (OVL_TYPE_MERGE(type)) + stat->nlink = 1; + + return 0; +} + +static int ovl_create_upper(struct dentry *dentry, struct inode *inode, + struct kstat *stat, const char *link, + struct dentry *hardlink) +{ + struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent); + struct inode *udir = upperdir->d_inode; + struct dentry *newdentry; + int err; + + mutex_lock_nested(&udir->i_mutex, I_MUTEX_PARENT); + newdentry = lookup_one_len(dentry->d_name.name, upperdir, + dentry->d_name.len); + err = PTR_ERR(newdentry); + if (IS_ERR(newdentry)) + goto out_unlock; + err = ovl_create_real(udir, newdentry, stat, link, hardlink, false); + if (err) + goto out_dput; + + ovl_dentry_version_inc(dentry->d_parent); + ovl_dentry_update(dentry, newdentry); + ovl_copyattr(newdentry->d_inode, inode); + d_instantiate(dentry, inode); + newdentry = NULL; +out_dput: + dput(newdentry); +out_unlock: + mutex_unlock(&udir->i_mutex); + return err; +} + +static int ovl_lock_rename_workdir(struct dentry *workdir, + struct dentry *upperdir) +{ + /* Workdir should not be the same as upperdir */ + if (workdir == upperdir) + goto err; + + /* Workdir should not be subdir of upperdir and vice versa */ + if (lock_rename(workdir, upperdir) != NULL) + goto err_unlock; + + return 0; + +err_unlock: + unlock_rename(workdir, upperdir); +err: + pr_err("overlayfs: failed to lock workdir+upperdir\n"); + return -EIO; +} + +static struct dentry *ovl_clear_empty(struct dentry *dentry, + struct list_head *list) +{ + struct dentry *workdir = ovl_workdir(dentry); + struct inode *wdir = workdir->d_inode; + struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent); + struct inode *udir = upperdir->d_inode; + struct path upperpath; + struct dentry *upper; + struct dentry *opaquedir; + struct kstat stat; + int err; + + err = ovl_lock_rename_workdir(workdir, upperdir); + if (err) + goto out; + + ovl_path_upper(dentry, &upperpath); + err = vfs_getattr(&upperpath, &stat); + if (err) + goto out_unlock; + + err = -ESTALE; + if (!S_ISDIR(stat.mode)) + goto out_unlock; + upper = upperpath.dentry; + if (upper->d_parent->d_inode != udir) + goto out_unlock; + + opaquedir = ovl_lookup_temp(workdir, dentry); + err = PTR_ERR(opaquedir); + if (IS_ERR(opaquedir)) + goto out_unlock; + + err = ovl_create_real(wdir, opaquedir, &stat, NULL, NULL, true); + if (err) + goto out_dput; + + err = ovl_copy_xattr(upper, opaquedir); + if (err) + goto out_cleanup; + + err = ovl_set_opaque(opaquedir); + if (err) + goto out_cleanup; + + mutex_lock(&opaquedir->d_inode->i_mutex); + err = ovl_set_attr(opaquedir, &stat); + mutex_unlock(&opaquedir->d_inode->i_mutex); + if (err) + goto out_cleanup; + + err = ovl_do_rename(wdir, opaquedir, udir, upper, RENAME_EXCHANGE); + if (err) + goto out_cleanup; + + ovl_cleanup_whiteouts(upper, list); + ovl_cleanup(wdir, upper); + unlock_rename(workdir, upperdir); + + /* dentry's upper doesn't match now, get rid of it */ + d_drop(dentry); + + return opaquedir; + +out_cleanup: + ovl_cleanup(wdir, opaquedir); +out_dput: + dput(opaquedir); +out_unlock: + unlock_rename(workdir, upperdir); +out: + return ERR_PTR(err); +} + +static struct dentry *ovl_check_empty_and_clear(struct dentry *dentry) +{ + int err; + struct dentry *ret = NULL; + LIST_HEAD(list); + + err = ovl_check_empty_dir(dentry, &list); + if (err) + ret = ERR_PTR(err); + else { + /* + * If no upperdentry then skip clearing whiteouts. + * + * Can race with copy-up, since we don't hold the upperdir + * mutex. Doesn't matter, since copy-up can't create a + * non-empty directory from an empty one. + */ + if (ovl_dentry_upper(dentry)) + ret = ovl_clear_empty(dentry, &list); + } + + ovl_cache_free(&list); + + return ret; +} + +static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode, + struct kstat *stat, const char *link, + struct dentry *hardlink) +{ + struct dentry *workdir = ovl_workdir(dentry); + struct inode *wdir = workdir->d_inode; + struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent); + struct inode *udir = upperdir->d_inode; + struct dentry *upper; + struct dentry *newdentry; + int err; + + err = ovl_lock_rename_workdir(workdir, upperdir); + if (err) + goto out; + + newdentry = ovl_lookup_temp(workdir, dentry); + err = PTR_ERR(newdentry); + if (IS_ERR(newdentry)) + goto out_unlock; + + upper = lookup_one_len(dentry->d_name.name, upperdir, + dentry->d_name.len); + err = PTR_ERR(upper); + if (IS_ERR(upper)) + goto out_dput; + + err = ovl_create_real(wdir, newdentry, stat, link, hardlink, true); + if (err) + goto out_dput2; + + if (S_ISDIR(stat->mode)) { + err = ovl_set_opaque(newdentry); + if (err) + goto out_cleanup; + + err = ovl_do_rename(wdir, newdentry, udir, upper, + RENAME_EXCHANGE); + if (err) + goto out_cleanup; + + ovl_cleanup(wdir, upper); + } else { + err = ovl_do_rename(wdir, newdentry, udir, upper, 0); + if (err) + goto out_cleanup; + } + ovl_dentry_version_inc(dentry->d_parent); + ovl_dentry_update(dentry, newdentry); + ovl_copyattr(newdentry->d_inode, inode); + d_instantiate(dentry, inode); + newdentry = NULL; +out_dput2: + dput(upper); +out_dput: + dput(newdentry); +out_unlock: + unlock_rename(workdir, upperdir); +out: + return err; + +out_cleanup: + ovl_cleanup(wdir, newdentry); + goto out_dput2; +} + +static int ovl_create_or_link(struct dentry *dentry, int mode, dev_t rdev, + const char *link, struct dentry *hardlink) +{ + int err; + struct inode *inode; + struct kstat stat = { + .mode = mode, + .rdev = rdev, + }; + + err = -ENOMEM; + inode = ovl_new_inode(dentry->d_sb, mode, dentry->d_fsdata); + if (!inode) + goto out; + + err = ovl_copy_up(dentry->d_parent); + if (err) + goto out_iput; + + if (!ovl_dentry_is_opaque(dentry)) { + err = ovl_create_upper(dentry, inode, &stat, link, hardlink); + } else { + const struct cred *old_cred; + struct cred *override_cred; + + err = -ENOMEM; + override_cred = prepare_creds(); + if (!override_cred) + goto out_iput; + + /* + * CAP_SYS_ADMIN for setting opaque xattr + * CAP_DAC_OVERRIDE for create in workdir, rename + * CAP_FOWNER for removing whiteout from sticky dir + */ + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); + cap_raise(override_cred->cap_effective, CAP_FOWNER); + old_cred = override_creds(override_cred); + + err = ovl_create_over_whiteout(dentry, inode, &stat, link, + hardlink); + + revert_creds(old_cred); + put_cred(override_cred); + } + + if (!err) + inode = NULL; +out_iput: + iput(inode); +out: + return err; +} + +static int ovl_create_object(struct dentry *dentry, int mode, dev_t rdev, + const char *link) +{ + int err; + + err = ovl_want_write(dentry); + if (!err) { + err = ovl_create_or_link(dentry, mode, rdev, link, NULL); + ovl_drop_write(dentry); + } + + return err; +} + +static int ovl_create(struct inode *dir, struct dentry *dentry, umode_t mode, + bool excl) +{ + return ovl_create_object(dentry, (mode & 07777) | S_IFREG, 0, NULL); +} + +static int ovl_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) +{ + return ovl_create_object(dentry, (mode & 07777) | S_IFDIR, 0, NULL); +} + +static int ovl_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, + dev_t rdev) +{ + /* Don't allow creation of "whiteout" on overlay */ + if (S_ISCHR(mode) && rdev == WHITEOUT_DEV) + return -EPERM; + + return ovl_create_object(dentry, mode, rdev, NULL); +} + +static int ovl_symlink(struct inode *dir, struct dentry *dentry, + const char *link) +{ + return ovl_create_object(dentry, S_IFLNK, 0, link); +} + +static int ovl_link(struct dentry *old, struct inode *newdir, + struct dentry *new) +{ + int err; + struct dentry *upper; + + err = ovl_want_write(old); + if (err) + goto out; + + err = ovl_copy_up(old); + if (err) + goto out_drop_write; + + upper = ovl_dentry_upper(old); + err = ovl_create_or_link(new, upper->d_inode->i_mode, 0, NULL, upper); + +out_drop_write: + ovl_drop_write(old); +out: + return err; +} + +static int ovl_remove_and_whiteout(struct dentry *dentry, bool is_dir) +{ + struct dentry *workdir = ovl_workdir(dentry); + struct inode *wdir = workdir->d_inode; + struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent); + struct inode *udir = upperdir->d_inode; + struct dentry *whiteout; + struct dentry *upper; + struct dentry *opaquedir = NULL; + int err; + + if (is_dir && OVL_TYPE_MERGE_OR_LOWER(ovl_path_type(dentry))) { + opaquedir = ovl_check_empty_and_clear(dentry); + err = PTR_ERR(opaquedir); + if (IS_ERR(opaquedir)) + goto out; + } + + err = ovl_lock_rename_workdir(workdir, upperdir); + if (err) + goto out_dput; + + whiteout = ovl_whiteout(workdir, dentry); + err = PTR_ERR(whiteout); + if (IS_ERR(whiteout)) + goto out_unlock; + + upper = ovl_dentry_upper(dentry); + if (!upper) { + upper = lookup_one_len(dentry->d_name.name, upperdir, + dentry->d_name.len); + err = PTR_ERR(upper); + if (IS_ERR(upper)) + goto kill_whiteout; + + err = ovl_do_rename(wdir, whiteout, udir, upper, 0); + dput(upper); + if (err) + goto kill_whiteout; + } else { + int flags = 0; + + if (opaquedir) + upper = opaquedir; + err = -ESTALE; + if (upper->d_parent != upperdir) + goto kill_whiteout; + + if (is_dir) + flags |= RENAME_EXCHANGE; + + err = ovl_do_rename(wdir, whiteout, udir, upper, flags); + if (err) + goto kill_whiteout; + + if (is_dir) + ovl_cleanup(wdir, upper); + } + ovl_dentry_version_inc(dentry->d_parent); +out_d_drop: + d_drop(dentry); + dput(whiteout); +out_unlock: + unlock_rename(workdir, upperdir); +out_dput: + dput(opaquedir); +out: + return err; + +kill_whiteout: + ovl_cleanup(wdir, whiteout); + goto out_d_drop; +} + +static int ovl_remove_upper(struct dentry *dentry, bool is_dir) +{ + struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent); + struct inode *dir = upperdir->d_inode; + struct dentry *upper = ovl_dentry_upper(dentry); + int err; + + mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); + err = -ESTALE; + if (upper->d_parent == upperdir) { + /* Don't let d_delete() think it can reset d_inode */ + dget(upper); + if (is_dir) + err = vfs_rmdir(dir, upper); + else + err = vfs_unlink(dir, upper, NULL); + dput(upper); + ovl_dentry_version_inc(dentry->d_parent); + } + + /* + * Keeping this dentry hashed would mean having to release + * upperpath/lowerpath, which could only be done if we are the + * sole user of this dentry. Too tricky... Just unhash for + * now. + */ + d_drop(dentry); + mutex_unlock(&dir->i_mutex); + + return err; +} + +static inline int ovl_check_sticky(struct dentry *dentry) +{ + struct inode *dir = ovl_dentry_real(dentry->d_parent)->d_inode; + struct inode *inode = ovl_dentry_real(dentry)->d_inode; + + if (check_sticky(dir, inode)) + return -EPERM; + + return 0; +} + +static int ovl_do_remove(struct dentry *dentry, bool is_dir) +{ + enum ovl_path_type type; + int err; + + err = ovl_check_sticky(dentry); + if (err) + goto out; + + err = ovl_want_write(dentry); + if (err) + goto out; + + err = ovl_copy_up(dentry->d_parent); + if (err) + goto out_drop_write; + + type = ovl_path_type(dentry); + if (OVL_TYPE_PURE_UPPER(type)) { + err = ovl_remove_upper(dentry, is_dir); + } else { + const struct cred *old_cred; + struct cred *override_cred; + + err = -ENOMEM; + override_cred = prepare_creds(); + if (!override_cred) + goto out_drop_write; + + /* + * CAP_SYS_ADMIN for setting xattr on whiteout, opaque dir + * CAP_DAC_OVERRIDE for create in workdir, rename + * CAP_FOWNER for removing whiteout from sticky dir + * CAP_FSETID for chmod of opaque dir + * CAP_CHOWN for chown of opaque dir + */ + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); + cap_raise(override_cred->cap_effective, CAP_FOWNER); + cap_raise(override_cred->cap_effective, CAP_FSETID); + cap_raise(override_cred->cap_effective, CAP_CHOWN); + old_cred = override_creds(override_cred); + + err = ovl_remove_and_whiteout(dentry, is_dir); + + revert_creds(old_cred); + put_cred(override_cred); + } +out_drop_write: + ovl_drop_write(dentry); +out: + return err; +} + +static int ovl_unlink(struct inode *dir, struct dentry *dentry) +{ + return ovl_do_remove(dentry, false); +} + +static int ovl_rmdir(struct inode *dir, struct dentry *dentry) +{ + return ovl_do_remove(dentry, true); +} + +static int ovl_rename2(struct inode *olddir, struct dentry *old, + struct inode *newdir, struct dentry *new, + unsigned int flags) +{ + int err; + enum ovl_path_type old_type; + enum ovl_path_type new_type; + struct dentry *old_upperdir; + struct dentry *new_upperdir; + struct dentry *olddentry; + struct dentry *newdentry; + struct dentry *trap; + bool old_opaque; + bool new_opaque; + bool new_create = false; + bool cleanup_whiteout = false; + bool overwrite = !(flags & RENAME_EXCHANGE); + bool is_dir = S_ISDIR(old->d_inode->i_mode); + bool new_is_dir = false; + struct dentry *opaquedir = NULL; + const struct cred *old_cred = NULL; + struct cred *override_cred = NULL; + + err = -EINVAL; + if (flags & ~(RENAME_EXCHANGE | RENAME_NOREPLACE)) + goto out; + + flags &= ~RENAME_NOREPLACE; + + err = ovl_check_sticky(old); + if (err) + goto out; + + /* Don't copy up directory trees */ + old_type = ovl_path_type(old); + err = -EXDEV; + if (OVL_TYPE_MERGE_OR_LOWER(old_type) && is_dir) + goto out; + + if (new->d_inode) { + err = ovl_check_sticky(new); + if (err) + goto out; + + if (S_ISDIR(new->d_inode->i_mode)) + new_is_dir = true; + + new_type = ovl_path_type(new); + err = -EXDEV; + if (!overwrite && OVL_TYPE_MERGE_OR_LOWER(new_type) && new_is_dir) + goto out; + + err = 0; + if (!OVL_TYPE_UPPER(new_type) && !OVL_TYPE_UPPER(old_type)) { + if (ovl_dentry_lower(old)->d_inode == + ovl_dentry_lower(new)->d_inode) + goto out; + } + if (OVL_TYPE_UPPER(new_type) && OVL_TYPE_UPPER(old_type)) { + if (ovl_dentry_upper(old)->d_inode == + ovl_dentry_upper(new)->d_inode) + goto out; + } + } else { + if (ovl_dentry_is_opaque(new)) + new_type = __OVL_PATH_UPPER; + else + new_type = __OVL_PATH_UPPER | __OVL_PATH_PURE; + } + + err = ovl_want_write(old); + if (err) + goto out; + + err = ovl_copy_up(old); + if (err) + goto out_drop_write; + + err = ovl_copy_up(new->d_parent); + if (err) + goto out_drop_write; + if (!overwrite) { + err = ovl_copy_up(new); + if (err) + goto out_drop_write; + } + + old_opaque = !OVL_TYPE_PURE_UPPER(old_type); + new_opaque = !OVL_TYPE_PURE_UPPER(new_type); + + if (old_opaque || new_opaque) { + err = -ENOMEM; + override_cred = prepare_creds(); + if (!override_cred) + goto out_drop_write; + + /* + * CAP_SYS_ADMIN for setting xattr on whiteout, opaque dir + * CAP_DAC_OVERRIDE for create in workdir + * CAP_FOWNER for removing whiteout from sticky dir + * CAP_FSETID for chmod of opaque dir + * CAP_CHOWN for chown of opaque dir + */ + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); + cap_raise(override_cred->cap_effective, CAP_FOWNER); + cap_raise(override_cred->cap_effective, CAP_FSETID); + cap_raise(override_cred->cap_effective, CAP_CHOWN); + old_cred = override_creds(override_cred); + } + + if (overwrite && OVL_TYPE_MERGE_OR_LOWER(new_type) && new_is_dir) { + opaquedir = ovl_check_empty_and_clear(new); + err = PTR_ERR(opaquedir); + if (IS_ERR(opaquedir)) { + opaquedir = NULL; + goto out_revert_creds; + } + } + + if (overwrite) { + if (old_opaque) { + if (new->d_inode || !new_opaque) { + /* Whiteout source */ + flags |= RENAME_WHITEOUT; + } else { + /* Switch whiteouts */ + flags |= RENAME_EXCHANGE; + } + } else if (is_dir && !new->d_inode && new_opaque) { + flags |= RENAME_EXCHANGE; + cleanup_whiteout = true; + } + } + + old_upperdir = ovl_dentry_upper(old->d_parent); + new_upperdir = ovl_dentry_upper(new->d_parent); + + trap = lock_rename(new_upperdir, old_upperdir); + + olddentry = ovl_dentry_upper(old); + newdentry = ovl_dentry_upper(new); + if (newdentry) { + if (opaquedir) { + newdentry = opaquedir; + opaquedir = NULL; + } else { + dget(newdentry); + } + } else { + new_create = true; + newdentry = lookup_one_len(new->d_name.name, new_upperdir, + new->d_name.len); + err = PTR_ERR(newdentry); + if (IS_ERR(newdentry)) + goto out_unlock; + } + + err = -ESTALE; + if (olddentry->d_parent != old_upperdir) + goto out_dput; + if (newdentry->d_parent != new_upperdir) + goto out_dput; + if (olddentry == trap) + goto out_dput; + if (newdentry == trap) + goto out_dput; + + if (is_dir && !old_opaque && new_opaque) { + err = ovl_set_opaque(olddentry); + if (err) + goto out_dput; + } + if (!overwrite && new_is_dir && old_opaque && !new_opaque) { + err = ovl_set_opaque(newdentry); + if (err) + goto out_dput; + } + + if (old_opaque || new_opaque) { + err = ovl_do_rename(old_upperdir->d_inode, olddentry, + new_upperdir->d_inode, newdentry, + flags); + } else { + /* No debug for the plain case */ + BUG_ON(flags & ~RENAME_EXCHANGE); + err = vfs_rename(old_upperdir->d_inode, olddentry, + new_upperdir->d_inode, newdentry, + NULL, flags); + } + + if (err) { + if (is_dir && !old_opaque && new_opaque) + ovl_remove_opaque(olddentry); + if (!overwrite && new_is_dir && old_opaque && !new_opaque) + ovl_remove_opaque(newdentry); + goto out_dput; + } + + if (is_dir && old_opaque && !new_opaque) + ovl_remove_opaque(olddentry); + if (!overwrite && new_is_dir && !old_opaque && new_opaque) + ovl_remove_opaque(newdentry); + + if (old_opaque != new_opaque) { + ovl_dentry_set_opaque(old, new_opaque); + if (!overwrite) + ovl_dentry_set_opaque(new, old_opaque); + } + + if (cleanup_whiteout) + ovl_cleanup(old_upperdir->d_inode, newdentry); + + ovl_dentry_version_inc(old->d_parent); + ovl_dentry_version_inc(new->d_parent); + +out_dput: + dput(newdentry); +out_unlock: + unlock_rename(new_upperdir, old_upperdir); +out_revert_creds: + if (old_opaque || new_opaque) { + revert_creds(old_cred); + put_cred(override_cred); + } +out_drop_write: + ovl_drop_write(old); +out: + dput(opaquedir); + return err; +} + +const struct inode_operations ovl_dir_inode_operations = { + .lookup = ovl_lookup, + .mkdir = ovl_mkdir, + .symlink = ovl_symlink, + .unlink = ovl_unlink, + .rmdir = ovl_rmdir, + .rename2 = ovl_rename2, + .link = ovl_link, + .setattr = ovl_setattr, + .create = ovl_create, + .mknod = ovl_mknod, + .permission = ovl_permission, + .getattr = ovl_dir_getattr, + .setxattr = ovl_setxattr, + .getxattr = ovl_getxattr, + .listxattr = ovl_listxattr, + .removexattr = ovl_removexattr, +}; diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c new file mode 100644 index 0000000000000..04f1248846877 --- /dev/null +++ b/fs/overlayfs/inode.c @@ -0,0 +1,436 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include "overlayfs.h" + +static int ovl_copy_up_last(struct dentry *dentry, struct iattr *attr, + bool no_data) +{ + int err; + struct dentry *parent; + struct kstat stat; + struct path lowerpath; + + parent = dget_parent(dentry); + err = ovl_copy_up(parent); + if (err) + goto out_dput_parent; + + ovl_path_lower(dentry, &lowerpath); + err = vfs_getattr(&lowerpath, &stat); + if (err) + goto out_dput_parent; + + if (no_data) + stat.size = 0; + + err = ovl_copy_up_one(parent, dentry, &lowerpath, &stat, attr); + +out_dput_parent: + dput(parent); + return err; +} + +int ovl_setattr(struct dentry *dentry, struct iattr *attr) +{ + int err; + struct dentry *upperdentry; + + err = ovl_want_write(dentry); + if (err) + goto out; + + upperdentry = ovl_dentry_upper(dentry); + if (upperdentry) { + mutex_lock(&upperdentry->d_inode->i_mutex); + err = notify_change(upperdentry, attr, NULL); + mutex_unlock(&upperdentry->d_inode->i_mutex); + } else { + err = ovl_copy_up_last(dentry, attr, false); + } + ovl_drop_write(dentry); +out: + return err; +} + +static int ovl_getattr(struct vfsmount *mnt, struct dentry *dentry, + struct kstat *stat) +{ + struct path realpath; + + ovl_path_real(dentry, &realpath); + return vfs_getattr(&realpath, stat); +} + +int ovl_permission(struct inode *inode, int mask) +{ + struct ovl_entry *oe; + struct dentry *alias = NULL; + struct inode *realinode; + struct dentry *realdentry; + bool is_upper; + int err; + + if (S_ISDIR(inode->i_mode)) { + oe = inode->i_private; + } else if (mask & MAY_NOT_BLOCK) { + return -ECHILD; + } else { + /* + * For non-directories find an alias and get the info + * from there. + */ + alias = d_find_any_alias(inode); + if (WARN_ON(!alias)) + return -ENOENT; + + oe = alias->d_fsdata; + } + + realdentry = ovl_entry_real(oe, &is_upper); + + /* Careful in RCU walk mode */ + realinode = ACCESS_ONCE(realdentry->d_inode); + if (!realinode) { + WARN_ON(!(mask & MAY_NOT_BLOCK)); + err = -ENOENT; + goto out_dput; + } + + if (mask & MAY_WRITE) { + umode_t mode = realinode->i_mode; + + /* + * Writes will always be redirected to upper layer, so + * ignore lower layer being read-only. + * + * If the overlay itself is read-only then proceed + * with the permission check, don't return EROFS. + * This will only happen if this is the lower layer of + * another overlayfs. + * + * If upper fs becomes read-only after the overlay was + * constructed return EROFS to prevent modification of + * upper layer. + */ + err = -EROFS; + if (is_upper && !IS_RDONLY(inode) && IS_RDONLY(realinode) && + (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode))) + goto out_dput; + } + + err = __inode_permission(realinode, mask); +out_dput: + dput(alias); + return err; +} + + +struct ovl_link_data { + struct dentry *realdentry; + void *cookie; +}; + +static void *ovl_follow_link(struct dentry *dentry, struct nameidata *nd) +{ + void *ret; + struct dentry *realdentry; + struct inode *realinode; + + realdentry = ovl_dentry_real(dentry); + realinode = realdentry->d_inode; + + if (WARN_ON(!realinode->i_op->follow_link)) + return ERR_PTR(-EPERM); + + ret = realinode->i_op->follow_link(realdentry, nd); + if (IS_ERR(ret)) + return ret; + + if (realinode->i_op->put_link) { + struct ovl_link_data *data; + + data = kmalloc(sizeof(struct ovl_link_data), GFP_KERNEL); + if (!data) { + realinode->i_op->put_link(realdentry, nd, ret); + return ERR_PTR(-ENOMEM); + } + data->realdentry = realdentry; + data->cookie = ret; + + return data; + } else { + return NULL; + } +} + +static void ovl_put_link(struct dentry *dentry, struct nameidata *nd, void *c) +{ + struct inode *realinode; + struct ovl_link_data *data = c; + + if (!data) + return; + + realinode = data->realdentry->d_inode; + realinode->i_op->put_link(data->realdentry, nd, data->cookie); + kfree(data); +} + +static int ovl_readlink(struct dentry *dentry, char __user *buf, int bufsiz) +{ + struct path realpath; + struct inode *realinode; + + ovl_path_real(dentry, &realpath); + realinode = realpath.dentry->d_inode; + + if (!realinode->i_op->readlink) + return -EINVAL; + + touch_atime(&realpath); + + return realinode->i_op->readlink(realpath.dentry, buf, bufsiz); +} + + +static bool ovl_is_private_xattr(const char *name) +{ + return strncmp(name, OVL_XATTR_PRE_NAME, OVL_XATTR_PRE_LEN) == 0; +} + +int ovl_setxattr(struct dentry *dentry, const char *name, + const void *value, size_t size, int flags) +{ + int err; + struct dentry *upperdentry; + + err = ovl_want_write(dentry); + if (err) + goto out; + + err = -EPERM; + if (ovl_is_private_xattr(name)) + goto out_drop_write; + + err = ovl_copy_up(dentry); + if (err) + goto out_drop_write; + + upperdentry = ovl_dentry_upper(dentry); + err = vfs_setxattr(upperdentry, name, value, size, flags); + +out_drop_write: + ovl_drop_write(dentry); +out: + return err; +} + +static bool ovl_need_xattr_filter(struct dentry *dentry, + enum ovl_path_type type) +{ + if ((type & (__OVL_PATH_PURE | __OVL_PATH_UPPER)) == __OVL_PATH_UPPER) + return S_ISDIR(dentry->d_inode->i_mode); + else + return false; +} + +ssize_t ovl_getxattr(struct dentry *dentry, const char *name, + void *value, size_t size) +{ + struct path realpath; + enum ovl_path_type type = ovl_path_real(dentry, &realpath); + + if (ovl_need_xattr_filter(dentry, type) && ovl_is_private_xattr(name)) + return -ENODATA; + + return vfs_getxattr(realpath.dentry, name, value, size); +} + +ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size) +{ + struct path realpath; + enum ovl_path_type type = ovl_path_real(dentry, &realpath); + ssize_t res; + int off; + + res = vfs_listxattr(realpath.dentry, list, size); + if (res <= 0 || size == 0) + return res; + + if (!ovl_need_xattr_filter(dentry, type)) + return res; + + /* filter out private xattrs */ + for (off = 0; off < res;) { + char *s = list + off; + size_t slen = strlen(s) + 1; + + BUG_ON(off + slen > res); + + if (ovl_is_private_xattr(s)) { + res -= slen; + memmove(s, s + slen, res - off); + } else { + off += slen; + } + } + + return res; +} + +int ovl_removexattr(struct dentry *dentry, const char *name) +{ + int err; + struct path realpath; + enum ovl_path_type type = ovl_path_real(dentry, &realpath); + + err = ovl_want_write(dentry); + if (err) + goto out; + + err = -ENODATA; + if (ovl_need_xattr_filter(dentry, type) && ovl_is_private_xattr(name)) + goto out_drop_write; + + if (!OVL_TYPE_UPPER(type)) { + err = vfs_getxattr(realpath.dentry, name, NULL, 0); + if (err < 0) + goto out_drop_write; + + err = ovl_copy_up(dentry); + if (err) + goto out_drop_write; + + ovl_path_upper(dentry, &realpath); + } + + err = vfs_removexattr(realpath.dentry, name); +out_drop_write: + ovl_drop_write(dentry); +out: + return err; +} + +static bool ovl_open_need_copy_up(int flags, enum ovl_path_type type, + struct dentry *realdentry) +{ + if (OVL_TYPE_UPPER(type)) + return false; + + if (special_file(realdentry->d_inode->i_mode)) + return false; + + if (!(OPEN_FMODE(flags) & FMODE_WRITE) && !(flags & O_TRUNC)) + return false; + + return true; +} + +static int ovl_dentry_open(struct dentry *dentry, struct file *file, + const struct cred *cred) +{ + int err; + struct path realpath; + enum ovl_path_type type; + bool want_write = false; + + type = ovl_path_real(dentry, &realpath); + if (ovl_open_need_copy_up(file->f_flags, type, realpath.dentry)) { + want_write = true; + err = ovl_want_write(dentry); + if (err) + goto out; + + if (file->f_flags & O_TRUNC) + err = ovl_copy_up_last(dentry, NULL, true); + else + err = ovl_copy_up(dentry); + if (err) + goto out_drop_write; + + ovl_path_upper(dentry, &realpath); + } + + err = vfs_open(&realpath, file, cred); +out_drop_write: + if (want_write) + ovl_drop_write(dentry); +out: + return err; +} + +static const struct inode_operations ovl_file_inode_operations = { + .setattr = ovl_setattr, + .permission = ovl_permission, + .getattr = ovl_getattr, + .setxattr = ovl_setxattr, + .getxattr = ovl_getxattr, + .listxattr = ovl_listxattr, + .removexattr = ovl_removexattr, + .dentry_open = ovl_dentry_open, +}; + +static const struct inode_operations ovl_symlink_inode_operations = { + .setattr = ovl_setattr, + .follow_link = ovl_follow_link, + .put_link = ovl_put_link, + .readlink = ovl_readlink, + .getattr = ovl_getattr, + .setxattr = ovl_setxattr, + .getxattr = ovl_getxattr, + .listxattr = ovl_listxattr, + .removexattr = ovl_removexattr, +}; + +struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, + struct ovl_entry *oe) +{ + struct inode *inode; + + inode = new_inode(sb); + if (!inode) + return NULL; + + mode &= S_IFMT; + + inode->i_ino = get_next_ino(); + inode->i_mode = mode; + inode->i_flags |= S_NOATIME | S_NOCMTIME; + + switch (mode) { + case S_IFDIR: + inode->i_private = oe; + inode->i_op = &ovl_dir_inode_operations; + inode->i_fop = &ovl_dir_operations; + break; + + case S_IFLNK: + inode->i_op = &ovl_symlink_inode_operations; + break; + + case S_IFREG: + case S_IFSOCK: + case S_IFBLK: + case S_IFCHR: + case S_IFIFO: + inode->i_op = &ovl_file_inode_operations; + break; + + default: + WARN(1, "illegal file type: %i\n", mode); + iput(inode); + inode = NULL; + } + + return inode; +} diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h new file mode 100644 index 0000000000000..17ac5afc9ffbc --- /dev/null +++ b/fs/overlayfs/overlayfs.h @@ -0,0 +1,199 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include + +struct ovl_entry; + +enum ovl_path_type { + __OVL_PATH_PURE = (1 << 0), + __OVL_PATH_UPPER = (1 << 1), + __OVL_PATH_MERGE = (1 << 2), +}; + +#define OVL_TYPE_UPPER(type) ((type) & __OVL_PATH_UPPER) +#define OVL_TYPE_MERGE(type) ((type) & __OVL_PATH_MERGE) +#define OVL_TYPE_PURE_UPPER(type) ((type) & __OVL_PATH_PURE) +#define OVL_TYPE_MERGE_OR_LOWER(type) \ + (OVL_TYPE_MERGE(type) || !OVL_TYPE_UPPER(type)) + +#define OVL_XATTR_PRE_NAME "trusted.overlay." +#define OVL_XATTR_PRE_LEN 16 +#define OVL_XATTR_OPAQUE OVL_XATTR_PRE_NAME"opaque" + +static inline int ovl_do_rmdir(struct inode *dir, struct dentry *dentry) +{ + int err = vfs_rmdir(dir, dentry); + pr_debug("rmdir(%pd2) = %i\n", dentry, err); + return err; +} + +static inline int ovl_do_unlink(struct inode *dir, struct dentry *dentry) +{ + int err = vfs_unlink(dir, dentry, NULL); + pr_debug("unlink(%pd2) = %i\n", dentry, err); + return err; +} + +static inline int ovl_do_link(struct dentry *old_dentry, struct inode *dir, + struct dentry *new_dentry, bool debug) +{ + int err = vfs_link(old_dentry, dir, new_dentry, NULL); + if (debug) { + pr_debug("link(%pd2, %pd2) = %i\n", + old_dentry, new_dentry, err); + } + return err; +} + +static inline int ovl_do_create(struct inode *dir, struct dentry *dentry, + umode_t mode, bool debug) +{ + int err = vfs_create(dir, dentry, mode, true); + if (debug) + pr_debug("create(%pd2, 0%o) = %i\n", dentry, mode, err); + return err; +} + +static inline int ovl_do_mkdir(struct inode *dir, struct dentry *dentry, + umode_t mode, bool debug) +{ + int err = vfs_mkdir(dir, dentry, mode); + if (debug) + pr_debug("mkdir(%pd2, 0%o) = %i\n", dentry, mode, err); + return err; +} + +static inline int ovl_do_mknod(struct inode *dir, struct dentry *dentry, + umode_t mode, dev_t dev, bool debug) +{ + int err = vfs_mknod(dir, dentry, mode, dev); + if (debug) { + pr_debug("mknod(%pd2, 0%o, 0%o) = %i\n", + dentry, mode, dev, err); + } + return err; +} + +static inline int ovl_do_symlink(struct inode *dir, struct dentry *dentry, + const char *oldname, bool debug) +{ + int err = vfs_symlink(dir, dentry, oldname); + if (debug) + pr_debug("symlink(\"%s\", %pd2) = %i\n", oldname, dentry, err); + return err; +} + +static inline int ovl_do_setxattr(struct dentry *dentry, const char *name, + const void *value, size_t size, int flags) +{ + int err = vfs_setxattr(dentry, name, value, size, flags); + pr_debug("setxattr(%pd2, \"%s\", \"%*s\", 0x%x) = %i\n", + dentry, name, (int) size, (char *) value, flags, err); + return err; +} + +static inline int ovl_do_removexattr(struct dentry *dentry, const char *name) +{ + int err = vfs_removexattr(dentry, name); + pr_debug("removexattr(%pd2, \"%s\") = %i\n", dentry, name, err); + return err; +} + +static inline int ovl_do_rename(struct inode *olddir, struct dentry *olddentry, + struct inode *newdir, struct dentry *newdentry, + unsigned int flags) +{ + int err; + + pr_debug("rename2(%pd2, %pd2, 0x%x)\n", + olddentry, newdentry, flags); + + err = vfs_rename(olddir, olddentry, newdir, newdentry, NULL, flags); + + if (err) { + pr_debug("...rename2(%pd2, %pd2, ...) = %i\n", + olddentry, newdentry, err); + } + return err; +} + +static inline int ovl_do_whiteout(struct inode *dir, struct dentry *dentry) +{ + int err = vfs_whiteout(dir, dentry); + pr_debug("whiteout(%pd2) = %i\n", dentry, err); + return err; +} + +enum ovl_path_type ovl_path_type(struct dentry *dentry); +u64 ovl_dentry_version_get(struct dentry *dentry); +void ovl_dentry_version_inc(struct dentry *dentry); +void ovl_path_upper(struct dentry *dentry, struct path *path); +void ovl_path_lower(struct dentry *dentry, struct path *path); +enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path); +int ovl_path_next(int idx, struct dentry *dentry, struct path *path); +struct dentry *ovl_dentry_upper(struct dentry *dentry); +struct dentry *ovl_dentry_lower(struct dentry *dentry); +struct dentry *ovl_dentry_real(struct dentry *dentry); +struct dentry *ovl_entry_real(struct ovl_entry *oe, bool *is_upper); +struct ovl_dir_cache *ovl_dir_cache(struct dentry *dentry); +void ovl_set_dir_cache(struct dentry *dentry, struct ovl_dir_cache *cache); +struct dentry *ovl_workdir(struct dentry *dentry); +int ovl_want_write(struct dentry *dentry); +void ovl_drop_write(struct dentry *dentry); +bool ovl_dentry_is_opaque(struct dentry *dentry); +void ovl_dentry_set_opaque(struct dentry *dentry, bool opaque); +bool ovl_is_whiteout(struct dentry *dentry); +void ovl_dentry_update(struct dentry *dentry, struct dentry *upperdentry); +struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, + unsigned int flags); +struct file *ovl_path_open(struct path *path, int flags); + +struct dentry *ovl_upper_create(struct dentry *upperdir, struct dentry *dentry, + struct kstat *stat, const char *link); + +/* readdir.c */ +extern const struct file_operations ovl_dir_operations; +int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list); +void ovl_cleanup_whiteouts(struct dentry *upper, struct list_head *list); +void ovl_cache_free(struct list_head *list); + +/* inode.c */ +int ovl_setattr(struct dentry *dentry, struct iattr *attr); +int ovl_permission(struct inode *inode, int mask); +int ovl_setxattr(struct dentry *dentry, const char *name, + const void *value, size_t size, int flags); +ssize_t ovl_getxattr(struct dentry *dentry, const char *name, + void *value, size_t size); +ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size); +int ovl_removexattr(struct dentry *dentry, const char *name); + +struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, + struct ovl_entry *oe); +static inline void ovl_copyattr(struct inode *from, struct inode *to) +{ + to->i_uid = from->i_uid; + to->i_gid = from->i_gid; +} + +/* dir.c */ +extern const struct inode_operations ovl_dir_inode_operations; +struct dentry *ovl_lookup_temp(struct dentry *workdir, struct dentry *dentry); +int ovl_create_real(struct inode *dir, struct dentry *newdentry, + struct kstat *stat, const char *link, + struct dentry *hardlink, bool debug); +void ovl_cleanup(struct inode *dir, struct dentry *dentry); + +/* copy_up.c */ +int ovl_copy_up(struct dentry *dentry); +int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, + struct path *lowerpath, struct kstat *stat, + struct iattr *attr); +int ovl_copy_xattr(struct dentry *old, struct dentry *new); +int ovl_set_attr(struct dentry *upper, struct kstat *stat); diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c new file mode 100644 index 0000000000000..907870e81a72e --- /dev/null +++ b/fs/overlayfs/readdir.c @@ -0,0 +1,557 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "overlayfs.h" + +struct ovl_cache_entry { + unsigned int len; + unsigned int type; + u64 ino; + struct list_head l_node; + struct rb_node node; + bool is_whiteout; + char name[]; +}; + +struct ovl_dir_cache { + long refcount; + u64 version; + struct list_head entries; +}; + +struct ovl_readdir_data { + struct dir_context ctx; + bool is_merge; + struct rb_root root; + struct list_head *list; + struct list_head middle; + struct dentry *dir; + int count; + int err; +}; + +struct ovl_dir_file { + bool is_real; + bool is_upper; + struct ovl_dir_cache *cache; + struct list_head *cursor; + struct file *realfile; + struct file *upperfile; +}; + +static struct ovl_cache_entry *ovl_cache_entry_from_node(struct rb_node *n) +{ + return container_of(n, struct ovl_cache_entry, node); +} + +static struct ovl_cache_entry *ovl_cache_entry_find(struct rb_root *root, + const char *name, int len) +{ + struct rb_node *node = root->rb_node; + int cmp; + + while (node) { + struct ovl_cache_entry *p = ovl_cache_entry_from_node(node); + + cmp = strncmp(name, p->name, len); + if (cmp > 0) + node = p->node.rb_right; + else if (cmp < 0 || len < p->len) + node = p->node.rb_left; + else + return p; + } + + return NULL; +} + +static struct ovl_cache_entry *ovl_cache_entry_new(struct dentry *dir, + const char *name, int len, + u64 ino, unsigned int d_type) +{ + struct ovl_cache_entry *p; + size_t size = offsetof(struct ovl_cache_entry, name[len + 1]); + + p = kmalloc(size, GFP_KERNEL); + if (!p) + return NULL; + + memcpy(p->name, name, len); + p->name[len] = '\0'; + p->len = len; + p->type = d_type; + p->ino = ino; + p->is_whiteout = false; + + if (d_type == DT_CHR) { + struct dentry *dentry; + const struct cred *old_cred; + struct cred *override_cred; + + override_cred = prepare_creds(); + if (!override_cred) { + kfree(p); + return NULL; + } + + /* + * CAP_DAC_OVERRIDE for lookup + */ + cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); + old_cred = override_creds(override_cred); + + dentry = lookup_one_len(name, dir, len); + if (!IS_ERR(dentry)) { + p->is_whiteout = ovl_is_whiteout(dentry); + dput(dentry); + } + revert_creds(old_cred); + put_cred(override_cred); + } + return p; +} + +static int ovl_cache_entry_add_rb(struct ovl_readdir_data *rdd, + const char *name, int len, u64 ino, + unsigned int d_type) +{ + struct rb_node **newp = &rdd->root.rb_node; + struct rb_node *parent = NULL; + struct ovl_cache_entry *p; + + while (*newp) { + int cmp; + struct ovl_cache_entry *tmp; + + parent = *newp; + tmp = ovl_cache_entry_from_node(*newp); + cmp = strncmp(name, tmp->name, len); + if (cmp > 0) + newp = &tmp->node.rb_right; + else if (cmp < 0 || len < tmp->len) + newp = &tmp->node.rb_left; + else + return 0; + } + + p = ovl_cache_entry_new(rdd->dir, name, len, ino, d_type); + if (p == NULL) + return -ENOMEM; + + list_add_tail(&p->l_node, rdd->list); + rb_link_node(&p->node, parent, newp); + rb_insert_color(&p->node, &rdd->root); + + return 0; +} + +static int ovl_fill_lower(struct ovl_readdir_data *rdd, + const char *name, int namelen, + loff_t offset, u64 ino, unsigned int d_type) +{ + struct ovl_cache_entry *p; + + p = ovl_cache_entry_find(&rdd->root, name, namelen); + if (p) { + list_move_tail(&p->l_node, &rdd->middle); + } else { + p = ovl_cache_entry_new(rdd->dir, name, namelen, ino, d_type); + if (p == NULL) + rdd->err = -ENOMEM; + else + list_add_tail(&p->l_node, &rdd->middle); + } + + return rdd->err; +} + +void ovl_cache_free(struct list_head *list) +{ + struct ovl_cache_entry *p; + struct ovl_cache_entry *n; + + list_for_each_entry_safe(p, n, list, l_node) + kfree(p); + + INIT_LIST_HEAD(list); +} + +static void ovl_cache_put(struct ovl_dir_file *od, struct dentry *dentry) +{ + struct ovl_dir_cache *cache = od->cache; + + WARN_ON(cache->refcount <= 0); + cache->refcount--; + if (!cache->refcount) { + if (ovl_dir_cache(dentry) == cache) + ovl_set_dir_cache(dentry, NULL); + + ovl_cache_free(&cache->entries); + kfree(cache); + } +} + +static int ovl_fill_merge(struct dir_context *ctx, const char *name, + int namelen, loff_t offset, u64 ino, + unsigned int d_type) +{ + struct ovl_readdir_data *rdd = + container_of(ctx, struct ovl_readdir_data, ctx); + + rdd->count++; + if (!rdd->is_merge) + return ovl_cache_entry_add_rb(rdd, name, namelen, ino, d_type); + else + return ovl_fill_lower(rdd, name, namelen, offset, ino, d_type); +} + +static inline int ovl_dir_read(struct path *realpath, + struct ovl_readdir_data *rdd) +{ + struct file *realfile; + int err; + + realfile = ovl_path_open(realpath, O_RDONLY | O_DIRECTORY); + if (IS_ERR(realfile)) + return PTR_ERR(realfile); + + rdd->dir = realpath->dentry; + rdd->ctx.pos = 0; + do { + rdd->count = 0; + rdd->err = 0; + err = iterate_dir(realfile, &rdd->ctx); + if (err >= 0) + err = rdd->err; + } while (!err && rdd->count); + fput(realfile); + + return err; +} + +static void ovl_dir_reset(struct file *file) +{ + struct ovl_dir_file *od = file->private_data; + struct ovl_dir_cache *cache = od->cache; + struct dentry *dentry = file->f_path.dentry; + enum ovl_path_type type = ovl_path_type(dentry); + + if (cache && ovl_dentry_version_get(dentry) != cache->version) { + ovl_cache_put(od, dentry); + od->cache = NULL; + od->cursor = NULL; + } + WARN_ON(!od->is_real && !OVL_TYPE_MERGE(type)); + if (od->is_real && OVL_TYPE_MERGE(type)) + od->is_real = false; +} + +static int ovl_dir_read_merged(struct dentry *dentry, struct list_head *list) +{ + int err; + struct path realpath; + struct ovl_readdir_data rdd = { + .ctx.actor = ovl_fill_merge, + .list = list, + .root = RB_ROOT, + .is_merge = false, + }; + int idx, next; + + for (idx = 0; idx != -1; idx = next) { + next = ovl_path_next(idx, dentry, &realpath); + + if (next != -1) { + err = ovl_dir_read(&realpath, &rdd); + if (err) + break; + } else { + /* + * Insert lowest layer entries before upper ones, this + * allows offsets to be reasonably constant + */ + list_add(&rdd.middle, rdd.list); + rdd.is_merge = true; + err = ovl_dir_read(&realpath, &rdd); + list_del(&rdd.middle); + } + } + return err; +} + +static void ovl_seek_cursor(struct ovl_dir_file *od, loff_t pos) +{ + struct list_head *p; + loff_t off = 0; + + list_for_each(p, &od->cache->entries) { + if (off >= pos) + break; + off++; + } + /* Cursor is safe since the cache is stable */ + od->cursor = p; +} + +static struct ovl_dir_cache *ovl_cache_get(struct dentry *dentry) +{ + int res; + struct ovl_dir_cache *cache; + + cache = ovl_dir_cache(dentry); + if (cache && ovl_dentry_version_get(dentry) == cache->version) { + cache->refcount++; + return cache; + } + ovl_set_dir_cache(dentry, NULL); + + cache = kzalloc(sizeof(struct ovl_dir_cache), GFP_KERNEL); + if (!cache) + return ERR_PTR(-ENOMEM); + + cache->refcount = 1; + INIT_LIST_HEAD(&cache->entries); + + res = ovl_dir_read_merged(dentry, &cache->entries); + if (res) { + ovl_cache_free(&cache->entries); + kfree(cache); + return ERR_PTR(res); + } + + cache->version = ovl_dentry_version_get(dentry); + ovl_set_dir_cache(dentry, cache); + + return cache; +} + +static int ovl_iterate(struct file *file, struct dir_context *ctx) +{ + struct ovl_dir_file *od = file->private_data; + struct dentry *dentry = file->f_path.dentry; + struct ovl_cache_entry *p; + + if (!ctx->pos) + ovl_dir_reset(file); + + if (od->is_real) + return iterate_dir(od->realfile, ctx); + + if (!od->cache) { + struct ovl_dir_cache *cache; + + cache = ovl_cache_get(dentry); + if (IS_ERR(cache)) + return PTR_ERR(cache); + + od->cache = cache; + ovl_seek_cursor(od, ctx->pos); + } + + while (od->cursor != &od->cache->entries) { + p = list_entry(od->cursor, struct ovl_cache_entry, l_node); + if (!p->is_whiteout) + if (!dir_emit(ctx, p->name, p->len, p->ino, p->type)) + break; + od->cursor = p->l_node.next; + ctx->pos++; + } + return 0; +} + +static loff_t ovl_dir_llseek(struct file *file, loff_t offset, int origin) +{ + loff_t res; + struct ovl_dir_file *od = file->private_data; + + mutex_lock(&file_inode(file)->i_mutex); + if (!file->f_pos) + ovl_dir_reset(file); + + if (od->is_real) { + res = vfs_llseek(od->realfile, offset, origin); + file->f_pos = od->realfile->f_pos; + } else { + res = -EINVAL; + + switch (origin) { + case SEEK_CUR: + offset += file->f_pos; + break; + case SEEK_SET: + break; + default: + goto out_unlock; + } + if (offset < 0) + goto out_unlock; + + if (offset != file->f_pos) { + file->f_pos = offset; + if (od->cache) + ovl_seek_cursor(od, offset); + } + res = offset; + } +out_unlock: + mutex_unlock(&file_inode(file)->i_mutex); + + return res; +} + +static int ovl_dir_fsync(struct file *file, loff_t start, loff_t end, + int datasync) +{ + struct ovl_dir_file *od = file->private_data; + struct dentry *dentry = file->f_path.dentry; + struct file *realfile = od->realfile; + + /* + * Need to check if we started out being a lower dir, but got copied up + */ + if (!od->is_upper && OVL_TYPE_UPPER(ovl_path_type(dentry))) { + struct inode *inode = file_inode(file); + + realfile = lockless_dereference(od->upperfile); + if (!realfile) { + struct path upperpath; + + ovl_path_upper(dentry, &upperpath); + realfile = ovl_path_open(&upperpath, O_RDONLY); + smp_mb__before_spinlock(); + mutex_lock(&inode->i_mutex); + if (!od->upperfile) { + if (IS_ERR(realfile)) { + mutex_unlock(&inode->i_mutex); + return PTR_ERR(realfile); + } + od->upperfile = realfile; + } else { + /* somebody has beaten us to it */ + if (!IS_ERR(realfile)) + fput(realfile); + realfile = od->upperfile; + } + mutex_unlock(&inode->i_mutex); + } + } + + return vfs_fsync_range(realfile, start, end, datasync); +} + +static int ovl_dir_release(struct inode *inode, struct file *file) +{ + struct ovl_dir_file *od = file->private_data; + + if (od->cache) { + mutex_lock(&inode->i_mutex); + ovl_cache_put(od, file->f_path.dentry); + mutex_unlock(&inode->i_mutex); + } + fput(od->realfile); + if (od->upperfile) + fput(od->upperfile); + kfree(od); + + return 0; +} + +static int ovl_dir_open(struct inode *inode, struct file *file) +{ + struct path realpath; + struct file *realfile; + struct ovl_dir_file *od; + enum ovl_path_type type; + + od = kzalloc(sizeof(struct ovl_dir_file), GFP_KERNEL); + if (!od) + return -ENOMEM; + + type = ovl_path_real(file->f_path.dentry, &realpath); + realfile = ovl_path_open(&realpath, file->f_flags); + if (IS_ERR(realfile)) { + kfree(od); + return PTR_ERR(realfile); + } + od->realfile = realfile; + od->is_real = !OVL_TYPE_MERGE(type); + od->is_upper = OVL_TYPE_UPPER(type); + file->private_data = od; + + return 0; +} + +const struct file_operations ovl_dir_operations = { + .read = generic_read_dir, + .open = ovl_dir_open, + .iterate = ovl_iterate, + .llseek = ovl_dir_llseek, + .fsync = ovl_dir_fsync, + .release = ovl_dir_release, +}; + +int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list) +{ + int err; + struct ovl_cache_entry *p; + + err = ovl_dir_read_merged(dentry, list); + if (err) + return err; + + err = 0; + + list_for_each_entry(p, list, l_node) { + if (p->is_whiteout) + continue; + + if (p->name[0] == '.') { + if (p->len == 1) + continue; + if (p->len == 2 && p->name[1] == '.') + continue; + } + err = -ENOTEMPTY; + break; + } + + return err; +} + +void ovl_cleanup_whiteouts(struct dentry *upper, struct list_head *list) +{ + struct ovl_cache_entry *p; + + mutex_lock_nested(&upper->d_inode->i_mutex, I_MUTEX_CHILD); + list_for_each_entry(p, list, l_node) { + struct dentry *dentry; + + if (!p->is_whiteout) + continue; + + dentry = lookup_one_len(p->name, upper, p->len); + if (IS_ERR(dentry)) { + pr_err("overlayfs: lookup '%s/%.*s' failed (%i)\n", + upper->d_name.name, p->len, p->name, + (int) PTR_ERR(dentry)); + continue; + } + ovl_cleanup(upper->d_inode, dentry); + dput(dentry); + } + mutex_unlock(&upper->d_inode->i_mutex); +} diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c new file mode 100644 index 0000000000000..5f0d1993e6e39 --- /dev/null +++ b/fs/overlayfs/super.c @@ -0,0 +1,1046 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "overlayfs.h" + +MODULE_AUTHOR("Miklos Szeredi "); +MODULE_DESCRIPTION("Overlay filesystem"); +MODULE_LICENSE("GPL"); + +#define OVERLAYFS_SUPER_MAGIC 0x794c7630 + +struct ovl_config { + char *lowerdir; + char *upperdir; + char *workdir; +}; + +/* private information held for overlayfs's superblock */ +struct ovl_fs { + struct vfsmount *upper_mnt; + unsigned numlower; + struct vfsmount **lower_mnt; + struct dentry *workdir; + long lower_namelen; + /* pathnames of lower and upper dirs, for show_options */ + struct ovl_config config; +}; + +struct ovl_dir_cache; + +/* private information held for every overlayfs dentry */ +struct ovl_entry { + struct dentry *__upperdentry; + struct ovl_dir_cache *cache; + union { + struct { + u64 version; + bool opaque; + }; + struct rcu_head rcu; + }; + unsigned numlower; + struct path lowerstack[]; +}; + +#define OVL_MAX_STACK 500 + +static struct dentry *__ovl_dentry_lower(struct ovl_entry *oe) +{ + return oe->numlower ? oe->lowerstack[0].dentry : NULL; +} + +enum ovl_path_type ovl_path_type(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + enum ovl_path_type type = 0; + + if (oe->__upperdentry) { + type = __OVL_PATH_UPPER; + + if (oe->numlower) { + if (S_ISDIR(dentry->d_inode->i_mode)) + type |= __OVL_PATH_MERGE; + } else if (!oe->opaque) { + type |= __OVL_PATH_PURE; + } + } else { + if (oe->numlower > 1) + type |= __OVL_PATH_MERGE; + } + return type; +} + +static struct dentry *ovl_upperdentry_dereference(struct ovl_entry *oe) +{ + return lockless_dereference(oe->__upperdentry); +} + +void ovl_path_upper(struct dentry *dentry, struct path *path) +{ + struct ovl_fs *ofs = dentry->d_sb->s_fs_info; + struct ovl_entry *oe = dentry->d_fsdata; + + path->mnt = ofs->upper_mnt; + path->dentry = ovl_upperdentry_dereference(oe); +} + +enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path) +{ + enum ovl_path_type type = ovl_path_type(dentry); + + if (!OVL_TYPE_UPPER(type)) + ovl_path_lower(dentry, path); + else + ovl_path_upper(dentry, path); + + return type; +} + +struct dentry *ovl_dentry_upper(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + return ovl_upperdentry_dereference(oe); +} + +struct dentry *ovl_dentry_lower(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + return __ovl_dentry_lower(oe); +} + +struct dentry *ovl_dentry_real(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + struct dentry *realdentry; + + realdentry = ovl_upperdentry_dereference(oe); + if (!realdentry) + realdentry = __ovl_dentry_lower(oe); + + return realdentry; +} + +struct dentry *ovl_entry_real(struct ovl_entry *oe, bool *is_upper) +{ + struct dentry *realdentry; + + realdentry = ovl_upperdentry_dereference(oe); + if (realdentry) { + *is_upper = true; + } else { + realdentry = __ovl_dentry_lower(oe); + *is_upper = false; + } + return realdentry; +} + +struct ovl_dir_cache *ovl_dir_cache(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + return oe->cache; +} + +void ovl_set_dir_cache(struct dentry *dentry, struct ovl_dir_cache *cache) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + oe->cache = cache; +} + +void ovl_path_lower(struct dentry *dentry, struct path *path) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + *path = oe->numlower ? oe->lowerstack[0] : (struct path) { NULL, NULL }; +} + +int ovl_want_write(struct dentry *dentry) +{ + struct ovl_fs *ofs = dentry->d_sb->s_fs_info; + return mnt_want_write(ofs->upper_mnt); +} + +void ovl_drop_write(struct dentry *dentry) +{ + struct ovl_fs *ofs = dentry->d_sb->s_fs_info; + mnt_drop_write(ofs->upper_mnt); +} + +struct dentry *ovl_workdir(struct dentry *dentry) +{ + struct ovl_fs *ofs = dentry->d_sb->s_fs_info; + return ofs->workdir; +} + +bool ovl_dentry_is_opaque(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + return oe->opaque; +} + +void ovl_dentry_set_opaque(struct dentry *dentry, bool opaque) +{ + struct ovl_entry *oe = dentry->d_fsdata; + oe->opaque = opaque; +} + +void ovl_dentry_update(struct dentry *dentry, struct dentry *upperdentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + WARN_ON(!mutex_is_locked(&upperdentry->d_parent->d_inode->i_mutex)); + WARN_ON(oe->__upperdentry); + BUG_ON(!upperdentry->d_inode); + /* + * Make sure upperdentry is consistent before making it visible to + * ovl_upperdentry_dereference(). + */ + smp_wmb(); + oe->__upperdentry = upperdentry; +} + +void ovl_dentry_version_inc(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + WARN_ON(!mutex_is_locked(&dentry->d_inode->i_mutex)); + oe->version++; +} + +u64 ovl_dentry_version_get(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + WARN_ON(!mutex_is_locked(&dentry->d_inode->i_mutex)); + return oe->version; +} + +bool ovl_is_whiteout(struct dentry *dentry) +{ + struct inode *inode = dentry->d_inode; + + return inode && IS_WHITEOUT(inode); +} + +static bool ovl_is_opaquedir(struct dentry *dentry) +{ + int res; + char val; + struct inode *inode = dentry->d_inode; + + if (!S_ISDIR(inode->i_mode) || !inode->i_op->getxattr) + return false; + + res = inode->i_op->getxattr(dentry, OVL_XATTR_OPAQUE, &val, 1); + if (res == 1 && val == 'y') + return true; + + return false; +} + +static void ovl_dentry_release(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + if (oe) { + unsigned int i; + + dput(oe->__upperdentry); + for (i = 0; i < oe->numlower; i++) + dput(oe->lowerstack[i].dentry); + kfree_rcu(oe, rcu); + } +} + +static const struct dentry_operations ovl_dentry_operations = { + .d_release = ovl_dentry_release, +}; + +static struct ovl_entry *ovl_alloc_entry(unsigned int numlower) +{ + size_t size = offsetof(struct ovl_entry, lowerstack[numlower]); + struct ovl_entry *oe = kzalloc(size, GFP_KERNEL); + + if (oe) + oe->numlower = numlower; + + return oe; +} + +static inline struct dentry *ovl_lookup_real(struct dentry *dir, + struct qstr *name) +{ + struct dentry *dentry; + + mutex_lock(&dir->d_inode->i_mutex); + dentry = lookup_one_len(name->name, dir, name->len); + mutex_unlock(&dir->d_inode->i_mutex); + + if (IS_ERR(dentry)) { + if (PTR_ERR(dentry) == -ENOENT) + dentry = NULL; + } else if (!dentry->d_inode) { + dput(dentry); + dentry = NULL; + } + return dentry; +} + +/* + * Returns next layer in stack starting from top. + * Returns -1 if this is the last layer. + */ +int ovl_path_next(int idx, struct dentry *dentry, struct path *path) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + BUG_ON(idx < 0); + if (idx == 0) { + ovl_path_upper(dentry, path); + if (path->dentry) + return oe->numlower ? 1 : -1; + idx++; + } + BUG_ON(idx > oe->numlower); + *path = oe->lowerstack[idx - 1]; + + return (idx < oe->numlower) ? idx + 1 : -1; +} + +struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, + unsigned int flags) +{ + struct ovl_entry *oe; + struct ovl_entry *poe = dentry->d_parent->d_fsdata; + struct path *stack = NULL; + struct dentry *upperdir, *upperdentry = NULL; + unsigned int ctr = 0; + struct inode *inode = NULL; + bool upperopaque = false; + struct dentry *this, *prev = NULL; + unsigned int i; + int err; + + upperdir = ovl_upperdentry_dereference(poe); + if (upperdir) { + this = ovl_lookup_real(upperdir, &dentry->d_name); + err = PTR_ERR(this); + if (IS_ERR(this)) + goto out; + + if (this) { + if (ovl_is_whiteout(this)) { + dput(this); + this = NULL; + upperopaque = true; + } else if (poe->numlower && ovl_is_opaquedir(this)) { + upperopaque = true; + } + } + upperdentry = prev = this; + } + + if (!upperopaque && poe->numlower) { + err = -ENOMEM; + stack = kcalloc(poe->numlower, sizeof(struct path), GFP_KERNEL); + if (!stack) + goto out_put_upper; + } + + for (i = 0; !upperopaque && i < poe->numlower; i++) { + bool opaque = false; + struct path lowerpath = poe->lowerstack[i]; + + this = ovl_lookup_real(lowerpath.dentry, &dentry->d_name); + err = PTR_ERR(this); + if (IS_ERR(this)) { + /* + * If it's positive, then treat ENAMETOOLONG as ENOENT. + */ + if (err == -ENAMETOOLONG && (upperdentry || ctr)) + continue; + goto out_put; + } + if (!this) + continue; + if (ovl_is_whiteout(this)) { + dput(this); + break; + } + /* + * Only makes sense to check opaque dir if this is not the + * lowermost layer. + */ + if (i < poe->numlower - 1 && ovl_is_opaquedir(this)) + opaque = true; + + if (prev && (!S_ISDIR(prev->d_inode->i_mode) || + !S_ISDIR(this->d_inode->i_mode))) { + /* + * FIXME: check for upper-opaqueness maybe better done + * in remove code. + */ + if (prev == upperdentry) + upperopaque = true; + dput(this); + break; + } + /* + * If this is a non-directory then stop here. + */ + if (!S_ISDIR(this->d_inode->i_mode)) + opaque = true; + + stack[ctr].dentry = this; + stack[ctr].mnt = lowerpath.mnt; + ctr++; + prev = this; + if (opaque) + break; + } + + oe = ovl_alloc_entry(ctr); + err = -ENOMEM; + if (!oe) + goto out_put; + + if (upperdentry || ctr) { + struct dentry *realdentry; + + realdentry = upperdentry ? upperdentry : stack[0].dentry; + + err = -ENOMEM; + inode = ovl_new_inode(dentry->d_sb, realdentry->d_inode->i_mode, + oe); + if (!inode) + goto out_free_oe; + ovl_copyattr(realdentry->d_inode, inode); + } + + oe->opaque = upperopaque; + oe->__upperdentry = upperdentry; + memcpy(oe->lowerstack, stack, sizeof(struct path) * ctr); + kfree(stack); + dentry->d_fsdata = oe; + d_add(dentry, inode); + + return NULL; + +out_free_oe: + kfree(oe); +out_put: + for (i = 0; i < ctr; i++) + dput(stack[i].dentry); + kfree(stack); +out_put_upper: + dput(upperdentry); +out: + return ERR_PTR(err); +} + +struct file *ovl_path_open(struct path *path, int flags) +{ + return dentry_open(path, flags, current_cred()); +} + +static void ovl_put_super(struct super_block *sb) +{ + struct ovl_fs *ufs = sb->s_fs_info; + unsigned i; + + dput(ufs->workdir); + mntput(ufs->upper_mnt); + for (i = 0; i < ufs->numlower; i++) + mntput(ufs->lower_mnt[i]); + + kfree(ufs->config.lowerdir); + kfree(ufs->config.upperdir); + kfree(ufs->config.workdir); + kfree(ufs); +} + +/** + * ovl_statfs + * @sb: The overlayfs super block + * @buf: The struct kstatfs to fill in with stats + * + * Get the filesystem statistics. As writes always target the upper layer + * filesystem pass the statfs to the upper filesystem (if it exists) + */ +static int ovl_statfs(struct dentry *dentry, struct kstatfs *buf) +{ + struct ovl_fs *ofs = dentry->d_sb->s_fs_info; + struct dentry *root_dentry = dentry->d_sb->s_root; + struct path path; + int err; + + ovl_path_real(root_dentry, &path); + + err = vfs_statfs(&path, buf); + if (!err) { + buf->f_namelen = max(buf->f_namelen, ofs->lower_namelen); + buf->f_type = OVERLAYFS_SUPER_MAGIC; + } + + return err; +} + +/** + * ovl_show_options + * + * Prints the mount options for a given superblock. + * Returns zero; does not fail. + */ +static int ovl_show_options(struct seq_file *m, struct dentry *dentry) +{ + struct super_block *sb = dentry->d_sb; + struct ovl_fs *ufs = sb->s_fs_info; + + seq_printf(m, ",lowerdir=%s", ufs->config.lowerdir); + if (ufs->config.upperdir) { + seq_printf(m, ",upperdir=%s", ufs->config.upperdir); + seq_printf(m, ",workdir=%s", ufs->config.workdir); + } + return 0; +} + +static int ovl_remount(struct super_block *sb, int *flags, char *data) +{ + struct ovl_fs *ufs = sb->s_fs_info; + + if (!(*flags & MS_RDONLY) && !ufs->upper_mnt) + return -EROFS; + + return 0; +} + +static const struct super_operations ovl_super_operations = { + .put_super = ovl_put_super, + .statfs = ovl_statfs, + .show_options = ovl_show_options, + .remount_fs = ovl_remount, +}; + +enum { + OPT_LOWERDIR, + OPT_UPPERDIR, + OPT_WORKDIR, + OPT_ERR, +}; + +static const match_table_t ovl_tokens = { + {OPT_LOWERDIR, "lowerdir=%s"}, + {OPT_UPPERDIR, "upperdir=%s"}, + {OPT_WORKDIR, "workdir=%s"}, + {OPT_ERR, NULL} +}; + +static char *ovl_next_opt(char **s) +{ + char *sbegin = *s; + char *p; + + if (sbegin == NULL) + return NULL; + + for (p = sbegin; *p; p++) { + if (*p == '\\') { + p++; + if (!*p) + break; + } else if (*p == ',') { + *p = '\0'; + *s = p + 1; + return sbegin; + } + } + *s = NULL; + return sbegin; +} + +static int ovl_parse_opt(char *opt, struct ovl_config *config) +{ + char *p; + + while ((p = ovl_next_opt(&opt)) != NULL) { + int token; + substring_t args[MAX_OPT_ARGS]; + + if (!*p) + continue; + + token = match_token(p, ovl_tokens, args); + switch (token) { + case OPT_UPPERDIR: + kfree(config->upperdir); + config->upperdir = match_strdup(&args[0]); + if (!config->upperdir) + return -ENOMEM; + break; + + case OPT_LOWERDIR: + kfree(config->lowerdir); + config->lowerdir = match_strdup(&args[0]); + if (!config->lowerdir) + return -ENOMEM; + break; + + case OPT_WORKDIR: + kfree(config->workdir); + config->workdir = match_strdup(&args[0]); + if (!config->workdir) + return -ENOMEM; + break; + + default: + pr_err("overlayfs: unrecognized mount option \"%s\" or missing value\n", p); + return -EINVAL; + } + } + + /* Workdir is useless in non-upper mount */ + if (!config->upperdir && config->workdir) { + pr_info("overlayfs: option \"workdir=%s\" is useless in a non-upper mount, ignore\n", + config->workdir); + kfree(config->workdir); + config->workdir = NULL; + } + + return 0; +} + +#define OVL_WORKDIR_NAME "work" + +static struct dentry *ovl_workdir_create(struct vfsmount *mnt, + struct dentry *dentry) +{ + struct inode *dir = dentry->d_inode; + struct dentry *work; + int err; + bool retried = false; + + err = mnt_want_write(mnt); + if (err) + return ERR_PTR(err); + + mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); +retry: + work = lookup_one_len(OVL_WORKDIR_NAME, dentry, + strlen(OVL_WORKDIR_NAME)); + + if (!IS_ERR(work)) { + struct kstat stat = { + .mode = S_IFDIR | 0, + }; + + if (work->d_inode) { + err = -EEXIST; + if (retried) + goto out_dput; + + retried = true; + ovl_cleanup(dir, work); + dput(work); + goto retry; + } + + err = ovl_create_real(dir, work, &stat, NULL, NULL, true); + if (err) + goto out_dput; + } +out_unlock: + mutex_unlock(&dir->i_mutex); + mnt_drop_write(mnt); + + return work; + +out_dput: + dput(work); + work = ERR_PTR(err); + goto out_unlock; +} + +static void ovl_unescape(char *s) +{ + char *d = s; + + for (;; s++, d++) { + if (*s == '\\') + s++; + *d = *s; + if (!*s) + break; + } +} + +static bool ovl_is_allowed_fs_type(struct dentry *root) +{ + const struct dentry_operations *dop = root->d_op; + + /* + * We don't support: + * - automount filesystems + * - filesystems with revalidate (FIXME for lower layer) + * - filesystems with case insensitive names + */ + if (dop && + (dop->d_manage || dop->d_automount || + dop->d_revalidate || dop->d_weak_revalidate || + dop->d_compare || dop->d_hash)) { + return false; + } + return true; +} + +static int ovl_mount_dir_noesc(const char *name, struct path *path) +{ + int err = -EINVAL; + + if (!*name) { + pr_err("overlayfs: empty lowerdir\n"); + goto out; + } + err = kern_path(name, LOOKUP_FOLLOW, path); + if (err) { + pr_err("overlayfs: failed to resolve '%s': %i\n", name, err); + goto out; + } + err = -EINVAL; + if (!ovl_is_allowed_fs_type(path->dentry)) { + pr_err("overlayfs: filesystem on '%s' not supported\n", name); + goto out_put; + } + if (!S_ISDIR(path->dentry->d_inode->i_mode)) { + pr_err("overlayfs: '%s' not a directory\n", name); + goto out_put; + } + return 0; + +out_put: + path_put(path); +out: + return err; +} + +static int ovl_mount_dir(const char *name, struct path *path) +{ + int err = -ENOMEM; + char *tmp = kstrdup(name, GFP_KERNEL); + + if (tmp) { + ovl_unescape(tmp); + err = ovl_mount_dir_noesc(tmp, path); + kfree(tmp); + } + return err; +} + +static int ovl_lower_dir(const char *name, struct path *path, long *namelen, + int *stack_depth) +{ + int err; + struct kstatfs statfs; + + err = ovl_mount_dir_noesc(name, path); + if (err) + goto out; + + err = vfs_statfs(path, &statfs); + if (err) { + pr_err("overlayfs: statfs failed on '%s'\n", name); + goto out_put; + } + *namelen = max(*namelen, statfs.f_namelen); + *stack_depth = max(*stack_depth, path->mnt->mnt_sb->s_stack_depth); + + return 0; + +out_put: + path_put(path); +out: + return err; +} + +/* Workdir should not be subdir of upperdir and vice versa */ +static bool ovl_workdir_ok(struct dentry *workdir, struct dentry *upperdir) +{ + bool ok = false; + + if (workdir != upperdir) { + ok = (lock_rename(workdir, upperdir) == NULL); + unlock_rename(workdir, upperdir); + } + return ok; +} + +static unsigned int ovl_split_lowerdirs(char *str) +{ + unsigned int ctr = 1; + char *s, *d; + + for (s = d = str;; s++, d++) { + if (*s == '\\') { + s++; + } else if (*s == ':') { + *d = '\0'; + ctr++; + continue; + } + *d = *s; + if (!*s) + break; + } + return ctr; +} + +static int ovl_fill_super(struct super_block *sb, void *data, int silent) +{ + struct path upperpath = { NULL, NULL }; + struct path workpath = { NULL, NULL }; + struct dentry *root_dentry; + struct ovl_entry *oe; + struct ovl_fs *ufs; + struct path *stack = NULL; + char *lowertmp; + char *lower; + unsigned int numlower; + unsigned int stacklen = 0; + unsigned int i; + int err; + + err = -ENOMEM; + ufs = kzalloc(sizeof(struct ovl_fs), GFP_KERNEL); + if (!ufs) + goto out; + + err = ovl_parse_opt((char *) data, &ufs->config); + if (err) + goto out_free_config; + + err = -EINVAL; + if (!ufs->config.lowerdir) { + pr_err("overlayfs: missing 'lowerdir'\n"); + goto out_free_config; + } + + sb->s_stack_depth = 0; + if (ufs->config.upperdir) { + if (!ufs->config.workdir) { + pr_err("overlayfs: missing 'workdir'\n"); + goto out_free_config; + } + + err = ovl_mount_dir(ufs->config.upperdir, &upperpath); + if (err) + goto out_free_config; + + /* Upper fs should not be r/o */ + if (upperpath.mnt->mnt_sb->s_flags & MS_RDONLY) { + pr_err("overlayfs: upper fs is r/o, try multi-lower layers mount\n"); + err = -EINVAL; + goto out_put_upperpath; + } + + err = ovl_mount_dir(ufs->config.workdir, &workpath); + if (err) + goto out_put_upperpath; + + err = -EINVAL; + if (upperpath.mnt != workpath.mnt) { + pr_err("overlayfs: workdir and upperdir must reside under the same mount\n"); + goto out_put_workpath; + } + if (!ovl_workdir_ok(workpath.dentry, upperpath.dentry)) { + pr_err("overlayfs: workdir and upperdir must be separate subtrees\n"); + goto out_put_workpath; + } + sb->s_stack_depth = upperpath.mnt->mnt_sb->s_stack_depth; + } + err = -ENOMEM; + lowertmp = kstrdup(ufs->config.lowerdir, GFP_KERNEL); + if (!lowertmp) + goto out_put_workpath; + + err = -EINVAL; + stacklen = ovl_split_lowerdirs(lowertmp); + if (stacklen > OVL_MAX_STACK) { + pr_err("overlayfs: too many lower directries, limit is %d\n", + OVL_MAX_STACK); + goto out_free_lowertmp; + } else if (!ufs->config.upperdir && stacklen == 1) { + pr_err("overlayfs: at least 2 lowerdir are needed while upperdir nonexistent\n"); + goto out_free_lowertmp; + } + + stack = kcalloc(stacklen, sizeof(struct path), GFP_KERNEL); + if (!stack) + goto out_free_lowertmp; + + lower = lowertmp; + for (numlower = 0; numlower < stacklen; numlower++) { + err = ovl_lower_dir(lower, &stack[numlower], + &ufs->lower_namelen, &sb->s_stack_depth); + if (err) + goto out_put_lowerpath; + + lower = strchr(lower, '\0') + 1; + } + + err = -EINVAL; + sb->s_stack_depth++; + if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) { + pr_err("overlayfs: maximum fs stacking depth exceeded\n"); + goto out_put_lowerpath; + } + + if (ufs->config.upperdir) { + ufs->upper_mnt = clone_private_mount(&upperpath); + err = PTR_ERR(ufs->upper_mnt); + if (IS_ERR(ufs->upper_mnt)) { + pr_err("overlayfs: failed to clone upperpath\n"); + goto out_put_lowerpath; + } + + ufs->workdir = ovl_workdir_create(ufs->upper_mnt, workpath.dentry); + err = PTR_ERR(ufs->workdir); + if (IS_ERR(ufs->workdir)) { + pr_err("overlayfs: failed to create directory %s/%s\n", + ufs->config.workdir, OVL_WORKDIR_NAME); + goto out_put_upper_mnt; + } + } + + err = -ENOMEM; + ufs->lower_mnt = kcalloc(numlower, sizeof(struct vfsmount *), GFP_KERNEL); + if (ufs->lower_mnt == NULL) + goto out_put_workdir; + for (i = 0; i < numlower; i++) { + struct vfsmount *mnt = clone_private_mount(&stack[i]); + + err = PTR_ERR(mnt); + if (IS_ERR(mnt)) { + pr_err("overlayfs: failed to clone lowerpath\n"); + goto out_put_lower_mnt; + } + /* + * Make lower_mnt R/O. That way fchmod/fchown on lower file + * will fail instead of modifying lower fs. + */ + mnt->mnt_flags |= MNT_READONLY; + + ufs->lower_mnt[ufs->numlower] = mnt; + ufs->numlower++; + } + + /* If the upper fs is nonexistent, we mark overlayfs r/o too */ + if (!ufs->upper_mnt) + sb->s_flags |= MS_RDONLY; + + sb->s_d_op = &ovl_dentry_operations; + + err = -ENOMEM; + oe = ovl_alloc_entry(numlower); + if (!oe) + goto out_put_lower_mnt; + + root_dentry = d_make_root(ovl_new_inode(sb, S_IFDIR, oe)); + if (!root_dentry) + goto out_free_oe; + + mntput(upperpath.mnt); + for (i = 0; i < numlower; i++) + mntput(stack[i].mnt); + path_put(&workpath); + kfree(lowertmp); + + oe->__upperdentry = upperpath.dentry; + for (i = 0; i < numlower; i++) { + oe->lowerstack[i].dentry = stack[i].dentry; + oe->lowerstack[i].mnt = ufs->lower_mnt[i]; + } + + root_dentry->d_fsdata = oe; + + sb->s_magic = OVERLAYFS_SUPER_MAGIC; + sb->s_op = &ovl_super_operations; + sb->s_root = root_dentry; + sb->s_fs_info = ufs; + + return 0; + +out_free_oe: + kfree(oe); +out_put_lower_mnt: + for (i = 0; i < ufs->numlower; i++) + mntput(ufs->lower_mnt[i]); + kfree(ufs->lower_mnt); +out_put_workdir: + dput(ufs->workdir); +out_put_upper_mnt: + mntput(ufs->upper_mnt); +out_put_lowerpath: + for (i = 0; i < numlower; i++) + path_put(&stack[i]); + kfree(stack); +out_free_lowertmp: + kfree(lowertmp); +out_put_workpath: + path_put(&workpath); +out_put_upperpath: + path_put(&upperpath); +out_free_config: + kfree(ufs->config.lowerdir); + kfree(ufs->config.upperdir); + kfree(ufs->config.workdir); + kfree(ufs); +out: + return err; +} + +static struct dentry *ovl_mount(struct file_system_type *fs_type, int flags, + const char *dev_name, void *raw_data) +{ + return mount_nodev(fs_type, flags, raw_data, ovl_fill_super); +} + +static struct file_system_type ovl_fs_type = { + .owner = THIS_MODULE, + .name = "overlay", + .mount = ovl_mount, + .kill_sb = kill_anon_super, +}; +MODULE_ALIAS_FS("overlay"); + +static int __init ovl_init(void) +{ + return register_filesystem(&ovl_fs_type); +} + +static void __exit ovl_exit(void) +{ + unregister_filesystem(&ovl_fs_type); +} + +module_init(ovl_init); +module_exit(ovl_exit); diff --git a/scripts/package/builddeb b/scripts/package/builddeb index 152d4d25ab7c2..2d17fa991ab24 100644 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -61,8 +61,30 @@ create_package() { forcearch="-DArchitecture=$debarch" fi + # Create preinstall and post install script to remove dtb + if [[ "$1" == *dtb* ]]; then + echo "if [ -d /boot/dtb-$version ]; then mv /boot/dtb-$version /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/preinst + echo "if [ -d /boot/dtb.old ]; then rm -rf /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst + echo "if [ -d /dtb ]; then mv /dtb /dtb.old; fi" >> $pdir/DEBIAN/preinst + echo "if [ -d /boot/dtb ]; then mv /boot/dtb /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst + echo "exit 0" >> $pdir/DEBIAN/preinst + chmod 775 $pdir/DEBIAN/preinst + # + echo "if [ -d /boot/dtb.old ]; then rm -rf /boot/dtb.old; fi" >> $pdir/DEBIAN/postinst + echo "ln -sf dtb-$version /boot/dtb > /dev/null 2>&1 || mv /boot/dtb-$version /boot/dtb" >> $pdir/DEBIAN/postinst + echo "exit 0" >> $pdir/DEBIAN/postinst + chmod 775 $pdir/DEBIAN/postinst + fi + + # Create postinstall script for headers + if [[ "$1" == *headers* ]]; then + echo "cd /usr/src/linux-headers-$version; echo \"Compiling headers - please wait ...\"; make -s scripts >/dev/null 2>&1" >> $pdir/DEBIAN/postinst + echo "exit 0" >> $pdir/DEBIAN/postinst + chmod 775 $pdir/DEBIAN/postinst + fi + # Create the package - dpkg-gencontrol -isp $forcearch -Vkernel:debarch="${debarch:-$(dpkg --print-architecture)}" -p$pname -P"$pdir" + dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch:-$(dpkg --print-architecture)}" -p$pname -P"$pdir" dpkg --build "$pdir" .. } @@ -78,11 +100,13 @@ tmpdir="$objtree/debian/tmp" fwdir="$objtree/debian/fwtmp" kernel_headers_dir="$objtree/debian/hdrtmp" libc_headers_dir="$objtree/debian/headertmp" +dtb_dir="$objtree/debian/dtbtmp" dbg_dir="$objtree/debian/dbgtmp" -packagename=linux-image-$version -fwpackagename=linux-firmware-image-$version -kernel_headers_packagename=linux-headers-$version -libc_headers_packagename=linux-libc-dev +packagename=linux-image"$LOCAL_VERSION" +fwpackagename=linux-firmware-image"$LOCAL_VERSION" +kernel_headers_packagename=linux-headers"$LOCAL_VERSION" +dtb_packagename=linux-dtb"$LOCAL_VERSION" +libc_headers_packagename=linux-libc-dev"$LOCAL_VERSION" dbg_packagename=$packagename-dbg if [ "$ARCH" = "um" ] ; then @@ -106,13 +130,17 @@ esac BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)" # Setup the directory structure -rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" +rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" mkdir -m 755 -p "$tmpdir/DEBIAN" mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename" mkdir -m 755 -p "$fwdir/DEBIAN" mkdir -p "$fwdir/lib/firmware/$version/" "$fwdir/usr/share/doc/$fwpackagename" mkdir -m 755 -p "$libc_headers_dir/DEBIAN" mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename" + +mkdir -m 755 -p "$dtb_dir/DEBIAN" +mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" + mkdir -m 755 -p "$kernel_headers_dir/DEBIAN" mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename" mkdir -p "$kernel_headers_dir/lib/modules/$version/" @@ -130,7 +158,7 @@ if [ "$ARCH" = "um" ] ; then cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config" gzip "$tmpdir/usr/share/doc/$packagename/config" -else +else cp System.map "$tmpdir/boot/System.map-$version" cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version" fi @@ -138,7 +166,7 @@ fi if [ -e $KBUILD_IMAGE ]; then cp $KBUILD_IMAGE "$tmpdir/$installed_image_path" else - cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/$installed_image_path" + cp arch/$ARCH/boot/Image "$tmpdir/$installed_image_path" fi if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then @@ -150,21 +178,25 @@ if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then rmdir "$tmpdir/lib/modules/$version" fi if [ -n "$BUILD_DEBUG" ] ; then - ( - cd $tmpdir - for module in $(find lib/modules/ -name *.ko); do - mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module) - # only keep debug symbols in the debug file - $OBJCOPY --only-keep-debug $module $dbg_dir/usr/lib/debug/$module - # strip original module from debug symbols - $OBJCOPY --strip-debug $module - # then add a link to those - $OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $module - done - ) + for module in $(find $tmpdir/lib/modules/ -name *.ko -printf '%P\n'); do + module=lib/modules/$module + mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module) + # only keep debug symbols in the debug file + $OBJCOPY --only-keep-debug $tmpdir/$module $dbg_dir/usr/lib/debug/$module + # strip original module from debug symbols + $OBJCOPY --strip-debug $tmpdir/$module + # then add a link to those + $OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module + done fi fi +if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then + mkdir -p "$tmpdir/boot/dtb-""$version" + cp $objtree/arch/$SRCARCH/boot/dts/*.dtb $dtb_dir/boot/dtb-$version + #INSTALL_DTBS_PATH="$dtb_dir/boot/dtb" $MAKE KBUILD_SRC= dtbs_install +fi + if [ "$ARCH" != "um" ]; then $MAKE headers_check KBUILD_SRC= $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr" @@ -200,6 +232,47 @@ EOF chmod 755 "$tmpdir/DEBIAN/$script" done +## +## Create sym link to kernel image +## +kernel_tmp_version="${installed_image_path////\\/}" +sed -e "s/set -e//g" -i $tmpdir/DEBIAN/postinst +sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst +cat >> $tmpdir/DEBIAN/postinst < /dev/null 2>&1 || mv /$kernel_tmp_version /boot/zImage + +exit 0 +EOT + +## +## FAT install workaround +## +sed -e "s/set -e//g" -i $tmpdir/DEBIAN/preinst +sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst +cat >> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst + # Try to determine maintainer and email values if [ -n "$DEBEMAIL" ]; then email=$DEBEMAIL @@ -217,9 +290,20 @@ else fi maintainer="$name <$email>" +# Try to determine distribution +if [ -n "$KDEB_CHANGELOG_DIST" ]; then + distribution=$KDEB_CHANGELOG_DIST +elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ]; then + : # nothing to do in this case +else + distribution="unstable" + echo >&2 "Using default distribution of 'unstable' in the changelog" + echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" +fi + # Generate a simple changelog template cat < debian/changelog -linux-upstream ($packageversion) unstable; urgency=low +linux-upstream ($packageversion) $distribution; urgency=low * Custom built Linux kernel. @@ -233,10 +317,10 @@ This is a packacked upstream version of the Linux kernel. The sources may be found at most Linux ftp sites, including: ftp://ftp.kernel.org/pub/linux/kernel -Copyright: 1991 - 2009 Linus Torvalds and others. +Copyright: 1991 - 2015 Linus Torvalds and others. The git repository for mainline kernel development is at: -git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git +git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -287,22 +371,33 @@ EOF fi -# Build header package -(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl > "$objtree/debian/hdrsrcfiles") -(cd $srctree; find arch/$SRCARCH/include include scripts -type f >> "$objtree/debian/hdrsrcfiles") -(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f >> "$objtree/debian/hdrobjfiles") +# Build kernel header package +(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles" +(cd $srctree; find arch/$SRCARCH/include include scripts -type f) >> "$objtree/debian/hdrsrcfiles" +(cd $srctree; find security -type f -name \*.h) >> "$objtree/debian/hdrsrcfiles" +(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles" +(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles" +(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" destdir=$kernel_headers_dir/usr/src/linux-headers-$version mkdir -p "$destdir" -(cd $srctree; tar -c -f - -T "$objtree/debian/hdrsrcfiles") | (cd $destdir; tar -xf -) -(cd $objtree; tar -c -f - -T "$objtree/debian/hdrobjfiles") | (cd $destdir; tar -xf -) +######################## headers patch +ZACNI=$(pwd) +cd $destdir +patch -p1 < /tmp/headers-debian-byteshift.patch +cd $ZACNI +######################## headers patch +(cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) +(cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" +(cd "$destdir"; make M=scripts clean) + cat <> debian/control Package: $kernel_headers_packagename -Provides: linux-headers, linux-headers-2.6 +Provides: linux-headers Architecture: any Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch} This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch} @@ -328,6 +423,16 @@ fi cat <> debian/control +Package: $dtb_packagename +Architecture: any +Description: Linux DTB, version $version + This package contains device blobs from the Linux kernel, version $version. +EOF + +create_package "$dtb_packagename" "$dtb_dir" + +cat <> debian/control + Package: $libc_headers_packagename Section: devel Provides: linux-kernel-headers @@ -339,7 +444,7 @@ EOF if [ "$ARCH" != "um" ]; then create_package "$kernel_headers_packagename" "$kernel_headers_dir" - create_package "$libc_headers_packagename" "$libc_headers_dir" +# create_package "$libc_headers_packagename" "$libc_headers_dir" fi create_package "$packagename" "$tmpdir" diff --git a/set_clean b/set_clean new file mode 100755 index 0000000000000..083e17e8bb6d4 --- /dev/null +++ b/set_clean @@ -0,0 +1,9 @@ +#!/bin/sh + +export ARCH=arm64 +export CROSS_COMPILE=aarch64-linux-gnu- +#export PATH=/opt/gcc-linaro-4.9-2016.02-x86_64_aarch64-linux-gnu/bin/:$PATH +export PATH=/opt/gcc-linaro-6.4.1-2017.11-x86_64_arm-linux-gnueabihf/bin/:$PATH + +#make clean +make distclean diff --git a/set_dtb b/set_dtb new file mode 100755 index 0000000000000..28be6d67b28fa --- /dev/null +++ b/set_dtb @@ -0,0 +1,8 @@ +#!/bin/sh + +export ARCH=arm64 +export CROSS_COMPILE=aarch64-linux-gnu- +#export PATH=/opt/gcc-linaro-4.9-2016.02-x86_64_aarch64-linux-gnu/bin/:$PATH +export PATH=/opt/gcc-linaro-6.4.1-2017.11-x86_64_arm-linux-gnueabihf/bin/:$PATH + +make dtbs diff --git a/set_make b/set_make new file mode 100755 index 0000000000000..bf1187578459a --- /dev/null +++ b/set_make @@ -0,0 +1,8 @@ +#!/bin/sh + +export ARCH=arm64 +export CROSS_COMPILE=aarch64-linux-gnu- +#export PATH=/opt/gcc-linaro-4.9-2016.02-x86_64_aarch64-linux-gnu/bin/:$PATH +export PATH=/opt/gcc-linaro-6.4.1-2017.11-x86_64_arm-linux-gnueabihf/bin/:$PATH + +make -j5 Image dtbs modules diff --git a/set_menuconfig b/set_menuconfig new file mode 100755 index 0000000000000..41efa900cee97 --- /dev/null +++ b/set_menuconfig @@ -0,0 +1,8 @@ +#!/bin/sh + +export ARCH=arm64 +export CROSS_COMPILE=aarch64-linux-gnu- +#export PATH=/opt/gcc-linaro-4.9-2016.02-x86_64_aarch64-linux-gnu/bin/:$PATH +export PATH=/opt/gcc-linaro-6.4.1-2017.11-x86_64_arm-linux-gnueabihf/bin/:$PATH + +make menuconfig From 7b30381a66257166e0ab4dd35914843072361226 Mon Sep 17 00:00:00 2001 From: balbes150 Date: Fri, 26 Jan 2018 23:05:50 +0300 Subject: [PATCH 2/2] add config --- config_20180126 | 4608 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 4608 insertions(+) create mode 100644 config_20180126 diff --git a/config_20180126 b/config_20180126 new file mode 100644 index 0000000000000..65853dfad7ec8 --- /dev/null +++ b/config_20180126 @@ -0,0 +1,4608 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/arm64 3.14.29 Kernel Configuration +# +CONFIG_ARM64=y +CONFIG_ARM64_HAS_SG_CHAIN=y +CONFIG_64BIT=y +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_MMU=y +CONFIG_ARCH_MMAP_RND_BITS_MIN=18 +CONFIG_ARCH_MMAP_RND_BITS_MAX=18 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 +CONFIG_NO_IOPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CSUM=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ARCH_DMA_ADDR_T_64BIT=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_SWIOTLB=y +CONFIG_IOMMU_HELPER=y +CONFIG_KERNEL_MODE_NEON=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_EXTABLE_SORT=y + +# +# General setup +# +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +# CONFIG_COMPILE_TEST is not set +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_DEFAULT_HOSTNAME="(none)" +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_FHANDLE=y +CONFIG_AUDIT=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_IRQ_DOMAIN=y +# CONFIG_IRQ_DOMAIN_DEBUG is not set +CONFIG_SPARSE_IRQ=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_ARCH_HAS_TICK_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y + +# +# Timers subsystem +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ_COMMON=y +# CONFIG_HZ_PERIODIC is not set +CONFIG_NO_HZ_IDLE=y +# CONFIG_NO_HZ_FULL is not set +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y + +# +# CPU/Task time and stats accounting +# +CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set + +# +# RCU Subsystem +# +CONFIG_TREE_PREEMPT_RCU=y +CONFIG_PREEMPT_RCU=y +CONFIG_RCU_STALL_COMMON=y +# CONFIG_RCU_USER_QS is not set +CONFIG_RCU_FANOUT=64 +CONFIG_RCU_FANOUT_LEAF=16 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_RCU_FAST_NO_HZ is not set +CONFIG_TREE_RCU_TRACE=y +# CONFIG_RCU_BOOST is not set +# CONFIG_RCU_NOCB_CPU is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=19 +CONFIG_GENERIC_SCHED_CLOCK=y +CONFIG_CGROUPS=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CPUSETS=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_RESOURCE_COUNTERS=y +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +CONFIG_MEMCG_SWAP_ENABLED=y +CONFIG_MEMCG_KMEM=y +# CONFIG_CGROUP_HUGETLB is not set +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +# CONFIG_CFS_BANDWIDTH is not set +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_BLK_CGROUP=y +# CONFIG_DEBUG_BLK_CGROUP is not set +# CONFIG_CHECKPOINT_RESTORE is not set +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +# CONFIG_SCHED_AUTOGROUP is not set +CONFIG_MM_OWNER=y +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_RD_XZ=y +CONFIG_RD_LZO=y +CONFIG_RD_LZ4=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_HAVE_UID16=y +CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_EXPERT=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_EMBEDDED=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLUB_DEBUG=y +# CONFIG_COMPAT_BRK is not set +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +CONFIG_SLUB_CPU_PARTIAL=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set +CONFIG_PROFILING=y +CONFIG_TRACEPOINTS=y +CONFIG_JUMP_LABEL=y +# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_CONTIGUOUS=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_HAVE_CLK=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +# CONFIG_CC_STACKPROTECTOR is not set +CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_MODULES_USE_ELF_RELA=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +CONFIG_HAVE_ARCH_MMAP_RND_BITS=y +CONFIG_ARCH_MMAP_RND_BITS=18 +CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 +CONFIG_CLONE_BACKWARDS=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_COMPAT_OLD_SIGACTION=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_MODULE_SIG is not set +CONFIG_STOP_MACHINE=y +CONFIG_BLOCK=y +CONFIG_BLK_DEV_BSG=y +CONFIG_BLK_DEV_BSGLIB=y +# CONFIG_BLK_DEV_INTEGRITY is not set +CONFIG_BLK_DEV_THROTTLING=y +# CONFIG_BLK_CMDLINE_PARSER is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_AIX_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +CONFIG_EFI_PARTITION=y +# CONFIG_SYSV68_PARTITION is not set +# CONFIG_CMDLINE_PARTITION is not set +CONFIG_BLOCK_COMPAT=y + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_CFQ_GROUP_IOSCHED is not set +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" +CONFIG_PADATA=y +CONFIG_ASN1=m +CONFIG_UNINLINE_SPIN_UNLOCK=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_FREEZER=y + +# +# Platform selection +# +# CONFIG_ARCH_VEXPRESS is not set +# CONFIG_ARCH_XGENE is not set + +# +# Bus support +# +CONFIG_ARM_AMBA=y + +# +# ARM errata workarounds via the alternatives framework +# +CONFIG_ARM64_ERRATUM_845719=y +CONFIG_ARM64_ERRATUM_843419=y +CONFIG_ARM64_ERRATUM_835769=y + +# +# Kernel Features +# +# CONFIG_ARM64_64K_PAGES is not set +# CONFIG_CPU_BIG_ENDIAN is not set +CONFIG_SMP=y +CONFIG_SCHED_MC=y +# CONFIG_SCHED_SMT is not set +# CONFIG_DISABLE_CPU_SCHED_DOMAIN_BALANCE is not set +CONFIG_SCHED_HMP=y +# CONFIG_SCHED_HMP_PRIO_FILTER is not set +CONFIG_HMP_FAST_CPU_MASK="" +CONFIG_HMP_SLOW_CPU_MASK="" +CONFIG_HMP_VARIABLE_SCALE=y +CONFIG_HMP_FREQUENCY_INVARIANT_SCALE=y +# CONFIG_SCHED_HMP_LITTLE_PACKING is not set +CONFIG_NR_CPUS=8 +CONFIG_HOTPLUG_CPU=y +CONFIG_SWP_EMULATE=y +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y +CONFIG_PREEMPT_COUNT=y +CONFIG_HZ=100 +CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_HAVE_ARCH_PFN_VALID=y +CONFIG_HW_PERF_EVENTS=y +CONFIG_ARMV7_COMPAT=y +CONFIG_ARMV7_COMPAT_CPUINFO=y +CONFIG_SYS_SUPPORTS_HUGETLBFS=y +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPARSEMEM=y +CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_NO_BOOTMEM=y +CONFIG_MEMORY_ISOLATION=y +# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_BALLOON_COMPACTION=y +CONFIG_COMPACTION=y +CONFIG_MIGRATION=y +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_ZONE_DMA_FLAG=0 +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +# CONFIG_TRANSPARENT_HUGEPAGE is not set +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_CLEANCACHE=y +CONFIG_FRONTSWAP=y +CONFIG_CMA=y +# CONFIG_CMA_DEBUG is not set +CONFIG_CMA_AREAS=7 +# CONFIG_ZBUD is not set +# CONFIG_ZSWAP is not set +CONFIG_ZSMALLOC=y +# CONFIG_PGTABLE_MAPPING is not set +CONFIG_GENERIC_EARLY_IOREMAP=y +# CONFIG_KEXEC is not set +# CONFIG_CRASH_DUMP is not set +# CONFIG_XEN is not set +CONFIG_FORCE_MAX_ZONEORDER=11 +# CONFIG_SECCOMP is not set + +# +# Boot options +# +CONFIG_CMDLINE=" " +# CONFIG_CMDLINE_FROM_BOOTLOADER is not set +CONFIG_CMDLINE_EXTEND=y +# CONFIG_CMDLINE_FORCE is not set +# CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_COMPAT_BINFMT_ELF=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_BINFMT_SCRIPT=y +# CONFIG_HAVE_AOUT is not set +CONFIG_BINFMT_MISC=y +CONFIG_COREDUMP=y +CONFIG_COMPAT=y +CONFIG_SYSVIPC_COMPAT=y + +# +# Power management options +# +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +CONFIG_HAS_WAKELOCK=y +CONFIG_HAS_EARLYSUSPEND=y +CONFIG_WAKELOCK=y +CONFIG_WAKELOCK_STAT=y +CONFIG_USER_WAKELOCK=y +CONFIG_EARLYSUSPEND=y +CONFIG_NO_USER_SPACE_SCREEN_ACCESS_CONTROL=y +# CONFIG_CONSOLE_EARLYSUSPEND is not set +# CONFIG_FB_EARLYSUSPEND is not set +CONFIG_HIBERNATE_CALLBACKS=y +CONFIG_HIBERNATION=y +CONFIG_PM_STD_PARTITION="" +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +# CONFIG_PM_AUTOSLEEP is not set +# CONFIG_PM_WAKELOCKS is not set +CONFIG_PM_RUNTIME=y +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +CONFIG_ARCH_HAS_OPP=y +CONFIG_PM_OPP=y +CONFIG_PM_CLK=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set +CONFIG_CPU_PM=y +# CONFIG_SUSPEND_TIME is not set +# CONFIG_MK_SNAPSHOT_ONLY is not set + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_STAT_DETAILS=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_HOTPLUG is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_HOTPLUG=y +CONFIG_CPU_FREQ_GOV_INTERACTIVE=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +# CONFIG_GENERIC_CPUFREQ_CPU0 is not set + +# +# ARM CPU frequency scaling drivers +# +CONFIG_ARM_BIG_LITTLE_CPUFREQ=y +# CONFIG_ARM_DT_BL_CPUFREQ is not set +CONFIG_ARM_SCPI_CPUFREQ=y +# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARM64_CPU_SUSPEND=y + +# +# CPU Power Management +# + +# +# CPU Idle +# +CONFIG_CPU_IDLE=y +# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set +# CONFIG_CPU_IDLE_GOV_LADDER is not set +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_DT_IDLE_STATES=y + +# +# ARM64 CPU Idle Drivers +# +CONFIG_ARM64_CPUIDLE=y +# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set +CONFIG_NET=y +CONFIG_COMPAT_NETLINK_MESSAGES=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_DIAG=y +CONFIG_UNIX=y +CONFIG_UNIX_DIAG=y +CONFIG_XFRM=y +CONFIG_XFRM_ALGO=y +CONFIG_XFRM_USER=y +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_MIGRATE=y +# CONFIG_XFRM_STATISTICS is not set +CONFIG_XFRM_IPCOMP=y +CONFIG_NET_KEY=y +CONFIG_NET_KEY_MIGRATE=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +# CONFIG_IP_FIB_TRIE_STATS is not set +CONFIG_IP_MULTIPLE_TABLES=y +# CONFIG_IP_ROUTE_MULTIPATH is not set +# CONFIG_IP_ROUTE_VERBOSE is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +CONFIG_NET_IPIP=y +# CONFIG_NET_IPGRE_DEMUX is not set +CONFIG_NET_IP_TUNNEL=y +# CONFIG_IP_MROUTE is not set +CONFIG_SYN_COOKIES=y +# CONFIG_NET_IPVTI is not set +# CONFIG_INET_AH is not set +CONFIG_INET_ESP=y +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=y +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_INET_UDP_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=y +CONFIG_INET6_ESP=y +CONFIG_INET6_IPCOMP=y +CONFIG_IPV6_MIP6=y +CONFIG_INET6_XFRM_TUNNEL=y +CONFIG_INET6_TUNNEL=y +CONFIG_INET6_XFRM_MODE_TRANSPORT=y +CONFIG_INET6_XFRM_MODE_TUNNEL=y +CONFIG_INET6_XFRM_MODE_BEET=y +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +# CONFIG_IPV6_VTI is not set +CONFIG_IPV6_SIT=y +# CONFIG_IPV6_SIT_6RD is not set +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=y +# CONFIG_IPV6_GRE is not set +CONFIG_IPV6_MULTIPLE_TABLES=y +# CONFIG_IPV6_SUBTREES is not set +# CONFIG_IPV6_MROUTE is not set +CONFIG_NETLABEL=y +# CONFIG_ANDROID_PARANOID_NETWORK is not set +CONFIG_NET_ACTIVITY_STATS=y +CONFIG_NETWORK_SECMARK=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_ADVANCED=y +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=y +# CONFIG_NETFILTER_NETLINK_ACCT is not set +CONFIG_NETFILTER_NETLINK_QUEUE=y +CONFIG_NETFILTER_NETLINK_LOG=y +CONFIG_NF_CONNTRACK=y +CONFIG_NF_CONNTRACK_MARK=y +# CONFIG_NF_CONNTRACK_SECMARK is not set +CONFIG_NF_CONNTRACK_PROCFS=y +CONFIG_NF_CONNTRACK_EVENTS=y +# CONFIG_NF_CONNTRACK_TIMEOUT is not set +# CONFIG_NF_CONNTRACK_TIMESTAMP is not set +CONFIG_NF_CT_PROTO_DCCP=y +CONFIG_NF_CT_PROTO_GRE=y +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +CONFIG_NF_CONNTRACK_AMANDA=y +CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_CONNTRACK_H323=y +CONFIG_NF_CONNTRACK_IRC=y +CONFIG_NF_CONNTRACK_BROADCAST=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=y +# CONFIG_NF_CONNTRACK_SNMP is not set +CONFIG_NF_CONNTRACK_PPTP=y +CONFIG_NF_CONNTRACK_SANE=y +# CONFIG_NF_CONNTRACK_SIP is not set +CONFIG_NF_CONNTRACK_TFTP=y +CONFIG_NF_CT_NETLINK=y +# CONFIG_NF_CT_NETLINK_TIMEOUT is not set +# CONFIG_NETFILTER_NETLINK_QUEUE_CT is not set +CONFIG_NF_NAT=y +CONFIG_NF_NAT_NEEDED=y +CONFIG_NF_NAT_PROTO_DCCP=y +CONFIG_NF_NAT_PROTO_UDPLITE=y +CONFIG_NF_NAT_PROTO_SCTP=y +CONFIG_NF_NAT_AMANDA=y +CONFIG_NF_NAT_FTP=y +CONFIG_NF_NAT_IRC=y +# CONFIG_NF_NAT_SIP is not set +CONFIG_NF_NAT_TFTP=y +# CONFIG_NF_TABLES is not set +CONFIG_NETFILTER_XTABLES=y + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=y +CONFIG_NETFILTER_XT_CONNMARK=y + +# +# Xtables targets +# +# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set +# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y +CONFIG_NETFILTER_XT_TARGET_CONNMARK=y +# CONFIG_NETFILTER_XT_TARGET_CT is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_HL is not set +# CONFIG_NETFILTER_XT_TARGET_HMARK is not set +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y +# CONFIG_NETFILTER_XT_TARGET_LED is not set +# CONFIG_NETFILTER_XT_TARGET_LOG is not set +CONFIG_NETFILTER_XT_TARGET_MARK=y +CONFIG_NETFILTER_XT_TARGET_NETMAP=y +CONFIG_NETFILTER_XT_TARGET_NFLOG=y +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set +CONFIG_NETFILTER_XT_TARGET_REDIRECT=y +# CONFIG_NETFILTER_XT_TARGET_TEE is not set +CONFIG_NETFILTER_XT_TARGET_TPROXY=y +CONFIG_NETFILTER_XT_TARGET_TRACE=y +# CONFIG_NETFILTER_XT_TARGET_SECMARK is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set + +# +# Xtables matches +# +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +# CONFIG_NETFILTER_XT_MATCH_BPF is not set +# CONFIG_NETFILTER_XT_MATCH_CGROUP is not set +# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set +CONFIG_NETFILTER_XT_MATCH_COMMENT=y +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y +# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y +CONFIG_NETFILTER_XT_MATCH_CONNMARK=y +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +# CONFIG_NETFILTER_XT_MATCH_CPU is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +CONFIG_NETFILTER_XT_MATCH_ECN=y +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y +CONFIG_NETFILTER_XT_MATCH_HELPER=y +CONFIG_NETFILTER_XT_MATCH_HL=y +# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set +CONFIG_NETFILTER_XT_MATCH_IPRANGE=y +CONFIG_NETFILTER_XT_MATCH_L2TP=y +CONFIG_NETFILTER_XT_MATCH_LENGTH=y +CONFIG_NETFILTER_XT_MATCH_LIMIT=y +CONFIG_NETFILTER_XT_MATCH_MAC=y +CONFIG_NETFILTER_XT_MATCH_MARK=y +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set +# CONFIG_NETFILTER_XT_MATCH_OSF is not set +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set +CONFIG_NETFILTER_XT_MATCH_POLICY=y +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y +CONFIG_NETFILTER_XT_MATCH_QTAGUID=y +CONFIG_NETFILTER_XT_MATCH_QUOTA=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_SOCKET=y +CONFIG_NETFILTER_XT_MATCH_STATE=y +CONFIG_NETFILTER_XT_MATCH_STATISTIC=y +CONFIG_NETFILTER_XT_MATCH_STRING=y +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +CONFIG_NETFILTER_XT_MATCH_TIME=y +CONFIG_NETFILTER_XT_MATCH_U32=y +# CONFIG_IP_SET is not set +# CONFIG_IP_VS is not set + +# +# IP: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV4=y +CONFIG_NF_CONNTRACK_IPV4=y +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_MATCH_AH=y +CONFIG_IP_NF_MATCH_ECN=y +# CONFIG_IP_NF_MATCH_RPFILTER is not set +CONFIG_IP_NF_MATCH_TTL=y +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +# CONFIG_IP_NF_TARGET_SYNPROXY is not set +# CONFIG_IP_NF_TARGET_ULOG is not set +CONFIG_NF_NAT_IPV4=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_NETMAP=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_NF_NAT_PROTO_GRE=y +CONFIG_NF_NAT_PPTP=y +CONFIG_NF_NAT_H323=y +CONFIG_IP_NF_MANGLE=y +# CONFIG_IP_NF_TARGET_CLUSTERIP is not set +# CONFIG_IP_NF_TARGET_ECN is not set +# CONFIG_IP_NF_TARGET_TTL is not set +CONFIG_IP_NF_RAW=y +# CONFIG_IP_NF_SECURITY is not set +CONFIG_IP_NF_ARPTABLES=y +CONFIG_IP_NF_ARPFILTER=y +CONFIG_IP_NF_ARP_MANGLE=y + +# +# IPv6: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV6=y +CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_IP6_NF_IPTABLES=y +# CONFIG_IP6_NF_MATCH_AH is not set +# CONFIG_IP6_NF_MATCH_EUI64 is not set +# CONFIG_IP6_NF_MATCH_FRAG is not set +# CONFIG_IP6_NF_MATCH_OPTS is not set +# CONFIG_IP6_NF_MATCH_HL is not set +# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set +# CONFIG_IP6_NF_MATCH_MH is not set +# CONFIG_IP6_NF_MATCH_RPFILTER is not set +# CONFIG_IP6_NF_MATCH_RT is not set +# CONFIG_IP6_NF_TARGET_HL is not set +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_TARGET_REJECT=y +# CONFIG_IP6_NF_TARGET_SYNPROXY is not set +CONFIG_IP6_NF_MANGLE=y +CONFIG_IP6_NF_RAW=y +# CONFIG_IP6_NF_SECURITY is not set +CONFIG_NF_NAT_IPV6=y +CONFIG_IP6_NF_TARGET_MASQUERADE=y +CONFIG_IP6_NF_TARGET_NPT=y +# CONFIG_BRIDGE_NF_EBTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_L2TP=y +CONFIG_L2TP_DEBUGFS=y +CONFIG_L2TP_V3=y +CONFIG_L2TP_IP=y +CONFIG_L2TP_ETH=y +CONFIG_STP=y +CONFIG_BRIDGE=y +# CONFIG_BRIDGE_IGMP_SNOOPING is not set +CONFIG_HAVE_NET_DSA=y +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +CONFIG_LLC=y +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +CONFIG_PHONET=y +# CONFIG_IEEE802154 is not set +CONFIG_6LOWPAN_IPHC=m +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +# CONFIG_NET_SCH_CBQ is not set +CONFIG_NET_SCH_HTB=y +# CONFIG_NET_SCH_HFSC is not set +# CONFIG_NET_SCH_PRIO is not set +# CONFIG_NET_SCH_MULTIQ is not set +# CONFIG_NET_SCH_RED is not set +# CONFIG_NET_SCH_SFB is not set +# CONFIG_NET_SCH_SFQ is not set +# CONFIG_NET_SCH_TEQL is not set +# CONFIG_NET_SCH_TBF is not set +# CONFIG_NET_SCH_GRED is not set +# CONFIG_NET_SCH_DSMARK is not set +# CONFIG_NET_SCH_NETEM is not set +# CONFIG_NET_SCH_DRR is not set +# CONFIG_NET_SCH_MQPRIO is not set +# CONFIG_NET_SCH_CHOKE is not set +# CONFIG_NET_SCH_QFQ is not set +# CONFIG_NET_SCH_CODEL is not set +# CONFIG_NET_SCH_FQ_CODEL is not set +# CONFIG_NET_SCH_FQ is not set +# CONFIG_NET_SCH_HHF is not set +# CONFIG_NET_SCH_PIE is not set +CONFIG_NET_SCH_INGRESS=y +# CONFIG_NET_SCH_PLUG is not set + +# +# Classification +# +CONFIG_NET_CLS=y +# CONFIG_NET_CLS_BASIC is not set +# CONFIG_NET_CLS_TCINDEX is not set +# CONFIG_NET_CLS_ROUTE4 is not set +# CONFIG_NET_CLS_FW is not set +CONFIG_NET_CLS_U32=y +# CONFIG_CLS_U32_PERF is not set +# CONFIG_CLS_U32_MARK is not set +# CONFIG_NET_CLS_RSVP is not set +# CONFIG_NET_CLS_RSVP6 is not set +# CONFIG_NET_CLS_FLOW is not set +# CONFIG_NET_CLS_CGROUP is not set +# CONFIG_NET_CLS_BPF is not set +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +# CONFIG_NET_EMATCH_CMP is not set +# CONFIG_NET_EMATCH_NBYTE is not set +CONFIG_NET_EMATCH_U32=y +# CONFIG_NET_EMATCH_META is not set +# CONFIG_NET_EMATCH_TEXT is not set +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=y +CONFIG_NET_ACT_GACT=y +# CONFIG_GACT_PROB is not set +CONFIG_NET_ACT_MIRRED=y +# CONFIG_NET_ACT_IPT is not set +# CONFIG_NET_ACT_NAT is not set +# CONFIG_NET_ACT_PEDIT is not set +# CONFIG_NET_ACT_SIMP is not set +# CONFIG_NET_ACT_SKBEDIT is not set +# CONFIG_NET_ACT_CSUM is not set +# CONFIG_NET_CLS_IND is not set +CONFIG_NET_SCH_FIFO=y +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=y +# CONFIG_BATMAN_ADV is not set +# CONFIG_OPENVSWITCH is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_MMAP is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_NET_MPLS_GSO is not set +# CONFIG_HSR is not set +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_XPS=y +# CONFIG_CGROUP_NET_PRIO is not set +# CONFIG_CGROUP_NET_CLASSID is not set +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_NET_DROP_MONITOR is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIBTSDIO=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_3WIRE=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +# CONFIG_BT_HCIVHCI is not set +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_BT_ATH3K=m +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y +CONFIG_WIRELESS=y +CONFIG_WIRELESS_EXT=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_WEXT_SPY=y +CONFIG_WEXT_PRIV=y +CONFIG_CFG80211=m +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_REG_DEBUG is not set +# CONFIG_CFG80211_CERTIFICATION_ONUS is not set +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_CFG80211_DEBUGFS is not set +# CONFIG_CFG80211_INTERNAL_REGDB is not set +CONFIG_CFG80211_WEXT=y +CONFIG_LIB80211=m +CONFIG_LIB80211_CRYPT_WEP=m +CONFIG_LIB80211_CRYPT_CCMP=m +CONFIG_LIB80211_CRYPT_TKIP=m +# CONFIG_LIB80211_DEBUG is not set +CONFIG_MAC80211=m +CONFIG_MAC80211_HAS_RC=y +# CONFIG_MAC80211_RC_PID is not set +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL_HT=y +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +CONFIG_MAC80211_MESH=y +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUGFS is not set +# CONFIG_MAC80211_MESSAGE_TRACING is not set +# CONFIG_MAC80211_DEBUG_MENU is not set +# CONFIG_WIMAX is not set +CONFIG_RFKILL=y +CONFIG_RFKILL_PM=y +CONFIG_RFKILL_LEDS=y +# CONFIG_RFKILL_INPUT is not set +# CONFIG_RFKILL_REGULATOR is not set +# CONFIG_RFKILL_GPIO is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set +# CONFIG_NFC is not set + +# +# Device Drivers +# + +# +# Amlogic Device Drivers +# +CONFIG_MESON_TIMER=y +# CONFIG_MESON_LOCAL_TIMER is not set +CONFIG_MESON_BC_TIMER=y +CONFIG_AM_UART=y +CONFIG_SERIAL_MESON_CONSOLE=y +# CONFIG_PRINTK_NOBLOCK_MODE is not set +CONFIG_AML_CPU_VERSION=y +CONFIG_AML_MESON64_VERSION=y +# CONFIG_AML_M8_VERSION is not set +CONFIG_AMLOGIC_IOMAP=y +CONFIG_PINCTRL_AMLOGIC=y + +# +# USB Support +# +CONFIG_AMLOGIC_USB=y +CONFIG_USB_DWC_OTG_HCD=y +CONFIG_USB_HOST_ELECT_TEST=y + +# +# I2C Hardware Bus support +# +CONFIG_I2C_AML=y +CONFIG_I2C_SLAVE_AML=y +# CONFIG_I2C_SW_AML is not set +# CONFIG_BCM2079X_I2C is not set +CONFIG_AML_PWM=y +CONFIG_GX_PWM=y + +# +# HDMI TX Support +# +CONFIG_AML_HDMI_TX=y +CONFIG_AML_HDMI_TX_20=y +# CONFIG_AML_HDMI_TX_14 is not set +# CONFIG_AML_RTC is not set +CONFIG_AML_VRTC=y +CONFIG_AM_IRBLASTER=y +# CONFIG_AML_DEBUG is not set +CONFIG_AML_REG_ACCESS=y + +# +# Power Management Support +# +# CONFIG_AML_POWER_SUPPORT is not set +# CONFIG_AML_PMU_ALGORITHM_SUPPORT is not set +CONFIG_AML_PMU4=y + +# +# Ethernet Support +# +CONFIG_AM_PHY=y +CONFIG_PHYLIB=y + +# +# MII PHY device drivers +# +CONFIG_AML_PHY=y +CONFIG_AML_SMSC=y +CONFIG_AML_ICPLUS=y +CONFIG_AML_MICREL=y +CONFIG_AML_REALTEK=y + +# +# MMC/SD/SDIO Host Controller Drivers +# + +# +# Multimedia Card support +# +CONFIG_MMC_AML=y +# CONFIG_MMC_AML_DEBUG is not set +# CONFIG_AML_MMC_DEBUG_FORCE_SINGLE_BLOCK_RW is not set + +# +# Amlogic VPU Drivers +# + +# +# Amlogic VPU Driver +# +CONFIG_AML_VPU=y +CONFIG_AML_VPU_DYNAMIC_ADJ=y + +# +# ION support +# +CONFIG_AMLOGIC_ION=y + +# +# Amlogic Display Driver +# +CONFIG_AML_DISPLAY=y + +# +# Amlogic VOUT Module +# +CONFIG_AM_VOUT=y +CONFIG_AM_TV_OUTPUT=y +CONFIG_AML_VOUT_FRAMERATE_AUTOMATION=y +# CONFIG_AML_VDAC_HW_SWITCH is not set + +# +# Amlogic OSD Module +# +CONFIG_AM_FB=y +CONFIG_FB_OSD_SUPPORT_SYNC_FENCE=y +CONFIG_FB_OSD_VSYNC_RDMA=y +CONFIG_FB_OSD2_ENABLE=y +# CONFIG_FB_OSD2_CURSOR is not set + +# +# Amlogic VOUT2 Module +# +# CONFIG_AM_VOUT2 is not set +# CONFIG_AM_TV_OUTPUT2 is not set + +# +# Amlogic OSD_EXT Module +# +# CONFIG_AM_FB_EXT is not set +CONFIG_AM_GE2D=y +CONFIG_AM_LOGO=y + +# +# Amlogic LCD Output Module +# +# CONFIG_AML_LCD is not set + +# +# Amlogic Backlight Support +# +# CONFIG_AML_BACKLIGHT is not set +# CONFIG_AMLOGIC_LED is not set + +# +# Canvas management driver +# +CONFIG_AML_CANVAS=y +CONFIG_AMLOGIC_CLK=y +CONFIG_AMLOGIC_SEC=y +# CONFIG_AML_SERR is not set +CONFIG_AMLOGIC_SECURITY_KEY=y +CONFIG_AM_PTSSERVER=y +# CONFIG_H264_4K2K_SINGLE_CORE is not set +CONFIG_VSYNC_RDMA=y +# CONFIG_TVIN_VIUIN is not set +CONFIG_AM_VIDEO=y +# CONFIG_AM_VIDEO2 is not set +# CONFIG_SUPPORT_VIDEO_ON_VPP2 is not set +CONFIG_GE2D_KEEP_FRAME=y + +# +# Video Decoders +# +CONFIG_AM_VDEC_MPEG12=y +CONFIG_AM_VDEC_MPEG4=y +CONFIG_AM_VDEC_VC1=y +CONFIG_AM_VDEC_H264=y +CONFIG_AM_VDEC_H264MVC=y +CONFIG_AM_VDEC_H264_4K2K=y +CONFIG_AM_VDEC_H265=y +CONFIG_AM_VDEC_VP9=y +CONFIG_AM_VDEC_MJPEG=y +CONFIG_AM_ENCODER=y +CONFIG_AM_JPEG_ENCODER=y +CONFIG_AM_PIC_DEC=y +CONFIG_AM_VDEC_REAL=y +CONFIG_AM_VDEC_AVS=y +# CONFIG_AM_JPEGDEC is not set +CONFIG_AM_TIMESYNC=y +CONFIG_AM_STREAMING=y +CONFIG_AM_SUBTITLE=y +CONFIG_AM_VIDEOCAPTURE=y +CONFIG_AM_HEVCENC=y + +# +# Deinterlace driver +# +CONFIG_DEINTERLACE=y +# CONFIG_AM_DEINTERLACE_SD_ONLY is not set +CONFIG_AML_VFM=y + +# +# EFUSE Support +# +CONFIG_EFUSE=y +# CONFIG_EFUSE_WRITE_VERSION_PERMIT is not set + +# +# key management Support +# +CONFIG_KEY_MANAGE=y + +# +# Audio Interface +# +CONFIG_AMAUDIO=y + +# +# Amlogic Audio Interface V2 +# +CONFIG_AMAUDIO2=y + +# +# Audio dsp process +# +CONFIG_AML_AUDIO_DSP=y + +# +# Post Process Manager driver +# +CONFIG_POST_PROCESS_MANAGER=y +CONFIG_POST_PROCESS_MANAGER_PPSCALER=y +CONFIG_POST_PROCESS_MANAGER_3D_PROCESS=y + +# +# Amlogic Wifi Driver +# +CONFIG_AM_WIFI=y +# CONFIG_BCMDHD_USE_STATIC_BUF is not set +CONFIG_AML_POWER_RESET=y +# CONFIG_M8_POWER_RESET is not set +CONFIG_GXBB_POWER_RESET=y + +# +# Amlogic Bt Rfkill Driver +# +CONFIG_BT_DEVICE=y +# CONFIG_BLUESLEEP is not set + +# +# Amlogic ion video support +# +CONFIG_VIDEOBUF2_ION=y +CONFIG_AMLOGIC_IONVIDEO=y + +# +# V4L2 Video Support +# +CONFIG_V4L_AMLOGIC_VIDEO=y +# CONFIG_V4L_AMLOGIC_VIDEO2 is not set + +# +# Amlogic TVIN Drivers +# +CONFIG_TVIN=y +# CONFIG_TVIN_VDIN is not set +# CONFIG_TVIN_AFE is not set +CONFIG_TVIN_HDMI=y +# CONFIG_TVIN_HDMI_CEC is not set +# CONFIG_TVIN_BT656 is not set +CONFIG_VIUIN=y +# CONFIG_TVIN_ISP is not set + +# +# Amlogic VECM Drivers +# + +# +# Amlogic amvecm Driver +# +CONFIG_AM_VECM=y +CONFIG_AML_NAND=y +CONFIG_AML_NEXT_GEN_NAND=y +CONFIG_AML_NFTL_NEW=m +CONFIG_AML_NAND_KEY=y +# CONFIG_SECURE_NAND is not set +CONFIG_AM_INPUT=y +CONFIG_AM_SARADC=y +CONFIG_MESON_NEW_INPUT_REMOTE=y +CONFIG_NEW_AM_REMOTE=y +CONFIG_MESON_INPUT_KEYBOARD=y +CONFIG_ADC_KEYPADS_AM=y +CONFIG_AML_GPIO_KEY=y +CONFIG_SENSOR_DEVICES=y +CONFIG_GRAVITY_BMA250=y +CONFIG_GRAVITY_BMA222=y +# CONFIG_GRAVITY_MMA7660 is not set +# CONFIG_GRAVITY_MIR3DA is not set +CONFIG_GRAVITY_LIS3DH=y +# CONFIG_GRAVITY_MMA8452 is not set +# CONFIG_GRAVITY_MC32X0 is not set +CONFIG_GRAVITY_DMARD06=y +# CONFIG_GRAVITY_MMA865X is not set +CONFIG_GRAVITY_LSM303D=y +CONFIG_GRAVITY_DMARD10=y +CONFIG_GRAVITY_KXTJ9=y +CONFIG_GRAVITY_STK8313=y +CONFIG_GRAVITY_STK8312=y +# CONFIG_GRAVITY_MM3A310 is not set +CONFIG_GRAVITY_MXC622X=y +CONFIG_GRAVITY_MXC6255XC=y +CONFIG_GYROSCOPE_L3GD20=y +CONFIG_LIGHT_CM36283=y +CONFIG_LIGHT_CM3232=y +CONFIG_LIGHT_CM3217=y +CONFIG_LIGHT_LTR501=y +# CONFIG_LIGHT_TSL2571 is not set +CONFIG_LIGHT_EPL6814=y +CONFIG_LIGHT_ISL29023=y +CONFIG_LIGHT_STK220X=y +CONFIG_LIGHT_LTR558=y +CONFIG_AMLOGIC_AVIN_DETECT=y +CONFIG_AML_AVIN_DETECT=y +# CONFIG_AMLOGIC_MESON_CPUFREQ is not set +CONFIG_AMLOGIC_SCPI_CPUFREQ=y +CONFIG_MESON_SUSPEND=y +# CONFIG_M8M2_SUSPEND is not set +CONFIG_GXBB_SUSPEND=y + +# +# Amlogic DVB driver +# +# CONFIG_AM_DVB is not set +# CONFIG_AM_ATVDEMOD is not set + +# +# AMLOGIC CI Driver +# +# CONFIG_AM_PCMCIA is not set +# CONFIG_AM_IOBUS is not set +# CONFIG_AML_SMARTCARD is not set + +# +# MESON MHU mailbox Support +# +CONFIG_MESON_MHU_MBOX=y +CONFIG_ARM_SCPI_PROTOCOL=y + +# +# RDMA management driver +# +CONFIG_AML_RDMA=y + +# +# Amlogic temperature sensor +# +CONFIG_AML_TEMP_SENSOR=y +CONFIG_AUDIO_DATA=y +CONFIG_INSTABOOT=y +CONFIG_INSTABOOT_MEM_MG=y + +# +# Amlogic Camera Support +# +# CONFIG_VIDEO_AMLOGIC_CAPTURE is not set +CONFIG_AML_CODEC_MM=y +CONFIG_AML_WDT=y +CONFIG_GX_WDT=y + +# +# AMLOGIC SPI Hardware bus support +# +# CONFIG_AMLOGIC_SPICC_MASTER is not set +# CONFIG_AMLOGIC_JTAG is not set +CONFIG_AMLOGIC_CPU_INFO=y + +# +# defend img file update support +# +CONFIG_DEFEND_IMG=y + +# +# AO CEC Support +# +CONFIG_AML_AO_CEC=y + +# +# Amlogic Crypto Support +# +CONFIG_CRYPTO_AML=y +CONFIG_AMLOGIC_WATCHPOINT=y + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/mdev" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +CONFIG_FW_LOADER_USER_HELPER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_GENERIC_CPU_DEVICES is not set +CONFIG_HAVE_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_REGMAP=y +CONFIG_REGMAP_I2C=y +CONFIG_REGMAP_SPI=y +CONFIG_REGMAP_MMIO=y +CONFIG_DMA_SHARED_BUFFER=y +CONFIG_DMA_CMA=y + +# +# Default contiguous memory area size: +# +CONFIG_CMA_SIZE_MBYTES=8 +CONFIG_CMA_SIZE_SEL_MBYTES=y +# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set +# CONFIG_CMA_SIZE_SEL_MIN is not set +# CONFIG_CMA_SIZE_SEL_MAX is not set +CONFIG_CMA_ALIGNMENT=8 + +# +# Bus devices +# +CONFIG_CONNECTOR=y +CONFIG_PROC_EVENTS=y +CONFIG_MTD=y +# CONFIG_MTD_TESTS is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_OF_PARTS=y +# CONFIG_MTD_AR7_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_SM_FTL is not set +CONFIG_MTD_OOPS=y +# CONFIG_MTD_SWAP is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_PHYSMAP_OF is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SST25L is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOCG3 is not set +CONFIG_MTD_NAND_IDS=y +CONFIG_MTD_NAND_ECC=y +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND=y +# CONFIG_MTD_NAND_ECC_BCH is not set +# CONFIG_MTD_SM_COMMON is not set +# CONFIG_MTD_NAND_DENALI is not set +# CONFIG_MTD_NAND_GPIO is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_DOCG4 is not set +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ONENAND is not set + +# +# LPDDR flash memory drivers +# +# CONFIG_MTD_LPDDR is not set +CONFIG_MTD_UBI=y +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_LIMIT=20 +# CONFIG_MTD_UBI_FASTMAP is not set +# CONFIG_MTD_UBI_GLUEBI is not set +CONFIG_DTC=y +CONFIG_OF=y + +# +# Device Tree and Open Firmware support +# +CONFIG_PROC_DEVICETREE=y +# CONFIG_OF_SELFTEST is not set +CONFIG_OF_FLATTREE=y +CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_ADDRESS=y +CONFIG_OF_IRQ=y +CONFIG_OF_NET=y +CONFIG_OF_MDIO=y +CONFIG_OF_MTD=y +CONFIG_OF_RESERVED_MEM=y +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_NULL_BLK is not set +CONFIG_ZRAM=m +# CONFIG_ZRAM_DEBUG is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_DRBD is not set +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_VIRTIO_BLK=y +# CONFIG_BLK_DEV_RBD is not set + +# +# Misc devices +# +# CONFIG_SENSORS_LIS3LV02D is not set +# CONFIG_AD525X_DPOT is not set +# CONFIG_ATMEL_PWM is not set +# CONFIG_DUMMY_IRQ is not set +# CONFIG_ICS932S401 is not set +# CONFIG_ATMEL_SSC is not set +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_APDS9802ALS is not set +# CONFIG_ISL29003 is not set +# CONFIG_ISL29020 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_SENSORS_BH1780 is not set +# CONFIG_SENSORS_BH1770 is not set +# CONFIG_SENSORS_APDS990X is not set +# CONFIG_HMC6352 is not set +# CONFIG_DS1682 is not set +# CONFIG_TI_DAC7512 is not set +# CONFIG_UID_STAT is not set +# CONFIG_BMP085_I2C is not set +# CONFIG_BMP085_SPI is not set +# CONFIG_USB_SWITCH_FSA9480 is not set +# CONFIG_LATTICE_ECP3_CONFIG is not set +# CONFIG_SRAM is not set +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_AT24 is not set +# CONFIG_EEPROM_AT25 is not set +# CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set +CONFIG_EEPROM_93CX6=m +# CONFIG_EEPROM_93XX46 is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_TI_ST is not set +# CONFIG_SENSORS_LIS3_SPI is not set +# CONFIG_SENSORS_LIS3_I2C is not set + +# +# Altera FPGA firmware download module +# +# CONFIG_ALTERA_STAPL is not set + +# +# Intel MIC Host Driver +# + +# +# Intel MIC Card Driver +# + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +CONFIG_SCSI_TGT=m +CONFIG_SCSI_NETLINK=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=y +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=y +# CONFIG_CHR_DEV_SCH is not set +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +CONFIG_SCSI_FC_ATTRS=m +# CONFIG_SCSI_FC_TGT_ATTRS is not set +CONFIG_SCSI_ISCSI_ATTRS=m +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +CONFIG_ISCSI_TCP=m +CONFIG_ISCSI_BOOT_SYSFS=m +# CONFIG_SCSI_UFSHCD is not set +CONFIG_LIBFC=m +CONFIG_LIBFCOE=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_VIRTIO=m +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +# CONFIG_SCSI_DH is not set +# CONFIG_SCSI_OSD_INITIATOR is not set +CONFIG_HAVE_PATA_PLATFORM=y +# CONFIG_ATA is not set +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +CONFIG_MD_MULTIPATH=m +CONFIG_MD_FAULTY=m +CONFIG_BCACHE=m +# CONFIG_BCACHE_DEBUG is not set +# CONFIG_BCACHE_CLOSURES_DEBUG is not set +CONFIG_BLK_DEV_DM_BUILTIN=y +CONFIG_BLK_DEV_DM=m +CONFIG_DM_DEBUG=y +CONFIG_DM_BUFIO=m +CONFIG_DM_BIO_PRISON=m +CONFIG_DM_PERSISTENT_DATA=m +# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_THIN_PROVISIONING=m +CONFIG_DM_CACHE=m +CONFIG_DM_CACHE_MQ=m +CONFIG_DM_CACHE_CLEANER=m +CONFIG_DM_MIRROR=m +CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_RAID=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m +CONFIG_DM_DELAY=m +CONFIG_DM_UEVENT=y +CONFIG_DM_FLAKEY=m +CONFIG_DM_VERITY=m +CONFIG_DM_SWITCH=m +# CONFIG_TARGET_CORE is not set +CONFIG_NETDEVICES=y +CONFIG_MII=y +CONFIG_NET_CORE=y +CONFIG_BONDING=m +CONFIG_DUMMY=m +# CONFIG_EQUALIZER is not set +# CONFIG_IFB is not set +CONFIG_NET_TEAM=m +CONFIG_NET_TEAM_MODE_BROADCAST=m +CONFIG_NET_TEAM_MODE_ROUNDROBIN=m +CONFIG_NET_TEAM_MODE_RANDOM=m +CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m +CONFIG_NET_TEAM_MODE_LOADBALANCE=m +CONFIG_MACVLAN=m +# CONFIG_MACVTAP is not set +CONFIG_VXLAN=m +CONFIG_NETCONSOLE=y +# CONFIG_NETCONSOLE_DYNAMIC is not set +CONFIG_NETPOLL=y +# CONFIG_NETPOLL_TRAP is not set +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_TUN=y +CONFIG_VETH=m +CONFIG_VIRTIO_NET=m +CONFIG_NLMON=m + +# +# CAIF transport drivers +# + +# +# Distributed Switch Architecture drivers +# +# CONFIG_NET_DSA_MV88E6XXX is not set +# CONFIG_NET_DSA_MV88E6060 is not set +# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set +# CONFIG_NET_DSA_MV88E6131 is not set +# CONFIG_NET_DSA_MV88E6123_61_65 is not set +CONFIG_ETHERNET=y +CONFIG_NET_VENDOR_ARC=y +# CONFIG_ARC_EMAC is not set +CONFIG_NET_CADENCE=y +# CONFIG_ARM_AT91_ETHER is not set +# CONFIG_MACB is not set +CONFIG_NET_VENDOR_BROADCOM=y +# CONFIG_B44 is not set +# CONFIG_NET_CALXEDA_XGMAC is not set +# CONFIG_DNET is not set +CONFIG_NET_VENDOR_INTEL=y +CONFIG_NET_VENDOR_I825XX=y +CONFIG_NET_VENDOR_MARVELL=y +# CONFIG_MVMDIO is not set +CONFIG_NET_VENDOR_MICREL=y +# CONFIG_KS8851 is not set +# CONFIG_KS8851_MLL is not set +CONFIG_NET_VENDOR_MICROCHIP=y +# CONFIG_ENC28J60 is not set +CONFIG_NET_VENDOR_NATSEMI=y +CONFIG_NET_VENDOR_8390=y +# CONFIG_ETHOC is not set +# CONFIG_SH_ETH is not set +CONFIG_NET_VENDOR_SEEQ=y +CONFIG_NET_VENDOR_SMSC=y +CONFIG_SMC91X=y +CONFIG_SMSC911X=y +# CONFIG_SMSC911X_ARCH_HOOKS is not set +CONFIG_NET_VENDOR_STMICRO=y +CONFIG_STMMAC_ETH=y +CONFIG_STMMAC_PLATFORM=y +CONFIG_DWMAC_MESON=y +CONFIG_STMMAC_DEBUG_FS=y +CONFIG_STMMAC_DA=y +CONFIG_NET_VENDOR_VIA=y +CONFIG_NET_VENDOR_WIZNET=y +# CONFIG_WIZNET_W5100 is not set +# CONFIG_WIZNET_W5300 is not set + +# +# MII PHY device drivers +# +CONFIG_AMLOGIC_PHY=y +# CONFIG_AT803X_PHY is not set +# CONFIG_AMD_PHY is not set +# CONFIG_MARVELL_PHY is not set +# CONFIG_DAVICOM_PHY is not set +# CONFIG_QSEMI_PHY is not set +# CONFIG_LXT_PHY is not set +# CONFIG_CICADA_PHY is not set +# CONFIG_VITESSE_PHY is not set +# CONFIG_SMSC_PHY is not set +# CONFIG_BROADCOM_PHY is not set +# CONFIG_BCM87XX_PHY is not set +CONFIG_ICPLUS_PHY=y +CONFIG_REALTEK_PHY=y +# CONFIG_NATIONAL_PHY is not set +# CONFIG_STE10XP is not set +# CONFIG_LSI_ET1011C_PHY is not set +# CONFIG_MICREL_PHY is not set +# CONFIG_FIXED_PHY is not set +# CONFIG_MDIO_BITBANG is not set +# CONFIG_MDIO_BUS_MUX_GPIO is not set +# CONFIG_MDIO_BUS_MUX_MMIOREG is not set +# CONFIG_MICREL_KS8995MA is not set +CONFIG_PPP=y +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_MPPE=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPPOE=m +CONFIG_PPPOL2TP=m +CONFIG_PPPOLAC=y +CONFIG_PPPOPNS=y +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=y + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_RTL8152=m +CONFIG_USB_USBNET=y +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_AX88179_178A=m +CONFIG_USB_NET_CDCETHER=y +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_CDC_NCM=y +CONFIG_USB_NET_HUAWEI_CDC_NCM=m +CONFIG_USB_NET_CDC_MBIM=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SR9700=m +CONFIG_USB_NET_SR9800=m +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_KC2190=y +CONFIG_USB_NET_ZAURUS=m +CONFIG_USB_NET_CX82310_ETH=m +CONFIG_USB_NET_KALMIA=m +CONFIG_USB_NET_QMI_WWAN=m +CONFIG_USB_HSO=m +CONFIG_USB_NET_INT51X1=m +CONFIG_USB_CDC_PHONET=m +CONFIG_USB_IPHETH=m +CONFIG_USB_SIERRA_NET=m +CONFIG_USB_VL600=m +CONFIG_WLAN=y +# CONFIG_LIBERTAS_THINFIRM is not set +CONFIG_AT76C50X_USB=m +CONFIG_USB_ZD1201=m +CONFIG_USB_NET_RNDIS_WLAN=m +CONFIG_RTL8187=m +CONFIG_RTL8187_LEDS=y +# CONFIG_MAC80211_HWSIM is not set +# CONFIG_WIFI_CONTROL_FUNC is not set +CONFIG_ATH_COMMON=m +CONFIG_ATH_CARDS=m +# CONFIG_ATH_DEBUG is not set +CONFIG_ATH9K_HW=m +CONFIG_ATH9K_COMMON=m +CONFIG_ATH9K_BTCOEX_SUPPORT=y +CONFIG_ATH9K=m +CONFIG_ATH9K_AHB=y +# CONFIG_ATH9K_DEBUGFS is not set +# CONFIG_ATH9K_WOW is not set +# CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set +CONFIG_ATH9K_RFKILL=y +CONFIG_ATH9K_HTC=m +# CONFIG_ATH9K_HTC_DEBUGFS is not set +CONFIG_CARL9170=m +CONFIG_CARL9170_LEDS=y +CONFIG_CARL9170_WPC=y +CONFIG_CARL9170_HWRNG=y +CONFIG_ATH6KL=m +# CONFIG_ATH6KL_SDIO is not set +CONFIG_ATH6KL_USB=m +# CONFIG_ATH6KL_DEBUG is not set +# CONFIG_ATH6KL_TRACING is not set +CONFIG_AR5523=m +CONFIG_ATH10K=m +# CONFIG_ATH10K_DEBUG is not set +# CONFIG_ATH10K_DEBUGFS is not set +# CONFIG_ATH10K_TRACING is not set +# CONFIG_WCN36XX is not set +CONFIG_B43=m +CONFIG_B43_SSB=y +CONFIG_B43_SDIO=y +CONFIG_B43_PIO=y +CONFIG_B43_PHY_N=y +CONFIG_B43_PHY_LP=y +CONFIG_B43_LEDS=y +CONFIG_B43_HWRNG=y +# CONFIG_B43_DEBUG is not set +CONFIG_B43LEGACY=m +CONFIG_B43LEGACY_LEDS=y +CONFIG_B43LEGACY_HWRNG=y +CONFIG_B43LEGACY_DEBUG=y +CONFIG_B43LEGACY_DMA=y +CONFIG_B43LEGACY_PIO=y +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y +# CONFIG_B43LEGACY_DMA_MODE is not set +# CONFIG_B43LEGACY_PIO_MODE is not set +CONFIG_BRCMUTIL=m +# CONFIG_BRCMSMAC is not set +CONFIG_BRCMFMAC=m +CONFIG_BRCMFMAC_SDIO=y +CONFIG_BRCMFMAC_USB=y +# CONFIG_BRCM_TRACING is not set +# CONFIG_BRCMDBG is not set +CONFIG_HOSTAP=m +# CONFIG_HOSTAP_FIRMWARE is not set +# CONFIG_LIBERTAS is not set +CONFIG_P54_COMMON=m +CONFIG_P54_USB=m +# CONFIG_P54_SPI is not set +CONFIG_P54_LEDS=y +CONFIG_RT2X00=m +CONFIG_RT2500USB=m +CONFIG_RT73USB=m +CONFIG_RT2800USB=m +CONFIG_RT2800USB_RT33XX=y +CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT3573=y +CONFIG_RT2800USB_RT53XX=y +CONFIG_RT2800USB_RT55XX=y +CONFIG_RT2800USB_UNKNOWN=y +CONFIG_RT2800_LIB=m +CONFIG_RT2X00_LIB_USB=m +CONFIG_RT2X00_LIB=m +CONFIG_RT2X00_LIB_FIRMWARE=y +CONFIG_RT2X00_LIB_CRYPTO=y +CONFIG_RT2X00_LIB_LEDS=y +# CONFIG_RT2X00_DEBUG is not set +CONFIG_RTL_CARDS=m +CONFIG_RTL8192CU=m +CONFIG_RTLWIFI=m +CONFIG_RTLWIFI_USB=m +# CONFIG_RTLWIFI_DEBUG is not set +CONFIG_RTL8192C_COMMON=m +CONFIG_BCMDHD=m +CONFIG_BCMDHD_FW_PATH="/lib/firmware/brcm/" +CONFIG_BCMDHD_NVRAM_PATH="/lib/firmware/brcm/" +CONFIG_BCMDHD_SDIO=y +CONFIG_BCMDHD_OOB=y +# CONFIG_BCMDHD_SDIO_IRQ is not set +# CONFIG_WL_TI is not set +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set +# CONFIG_MWIFIEX is not set +# CONFIG_CW1200 is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# +# CONFIG_WAN is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_FF_MEMLESS=y +CONFIG_INPUT_POLLDEV=y +# CONFIG_INPUT_SPARSEKMAP is not set +# CONFIG_INPUT_MATRIXKMAP is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set +# CONFIG_INPUT_KEYRESET is not set +# CONFIG_INPUT_KEYCOMBO is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADP5588 is not set +# CONFIG_KEYBOARD_ADP5589 is not set +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_QT1070 is not set +# CONFIG_KEYBOARD_QT2160 is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_KEYBOARD_GPIO_POLLED is not set +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_TCA8418 is not set +# CONFIG_KEYBOARD_MATRIX is not set +# CONFIG_KEYBOARD_LM8323 is not set +# CONFIG_KEYBOARD_LM8333 is not set +# CONFIG_KEYBOARD_MAX7359 is not set +# CONFIG_KEYBOARD_MCS is not set +# CONFIG_KEYBOARD_MPR121 is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_SAMSUNG is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_CYPRESS=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_ELANTECH is not set +# CONFIG_MOUSE_PS2_SENTELIC is not set +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +# CONFIG_MOUSE_SERIAL is not set +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_BCM5974=m +# CONFIG_MOUSE_CYAPA is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_GPIO is not set +# CONFIG_MOUSE_SYNAPTICS_I2C is not set +CONFIG_MOUSE_SYNAPTICS_USB=m +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_ANALOG=m +CONFIG_JOYSTICK_A3D=m +CONFIG_JOYSTICK_ADI=m +CONFIG_JOYSTICK_COBRA=m +CONFIG_JOYSTICK_GF2K=m +CONFIG_JOYSTICK_GRIP=m +CONFIG_JOYSTICK_GRIP_MP=m +CONFIG_JOYSTICK_GUILLEMOT=m +CONFIG_JOYSTICK_INTERACT=m +CONFIG_JOYSTICK_SIDEWINDER=m +CONFIG_JOYSTICK_TMDC=m +CONFIG_JOYSTICK_IFORCE=m +CONFIG_JOYSTICK_IFORCE_USB=y +CONFIG_JOYSTICK_IFORCE_232=y +CONFIG_JOYSTICK_WARRIOR=m +CONFIG_JOYSTICK_MAGELLAN=m +CONFIG_JOYSTICK_SPACEORB=m +CONFIG_JOYSTICK_SPACEBALL=m +CONFIG_JOYSTICK_STINGER=m +CONFIG_JOYSTICK_TWIDJOY=m +CONFIG_JOYSTICK_ZHENHUA=m +CONFIG_JOYSTICK_AS5011=m +CONFIG_JOYSTICK_JOYDUMP=m +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_AD7877 is not set +# CONFIG_TOUCHSCREEN_AD7879 is not set +# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set +# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set +# CONFIG_TOUCHSCREEN_BU21013 is not set +# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set +# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set +# CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set +# CONFIG_TOUCHSCREEN_DYNAPRO is not set +# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set +# CONFIG_TOUCHSCREEN_EETI is not set +# CONFIG_TOUCHSCREEN_EGALAX is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_ILI210X is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set +# CONFIG_TOUCHSCREEN_WACOM_I2C is not set +# CONFIG_TOUCHSCREEN_MAX11801 is not set +# CONFIG_TOUCHSCREEN_MCS5000 is not set +# CONFIG_TOUCHSCREEN_MMS114 is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_INEXIO is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_PIXCIR is not set +# CONFIG_TOUCHSCREEN_WM97XX is not set +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_USB_EGALAX=y +CONFIG_TOUCHSCREEN_USB_PANJIT=y +CONFIG_TOUCHSCREEN_USB_3M=y +CONFIG_TOUCHSCREEN_USB_ITM=y +CONFIG_TOUCHSCREEN_USB_ETURBO=y +CONFIG_TOUCHSCREEN_USB_GUNZE=y +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y +CONFIG_TOUCHSCREEN_USB_IDEALTEK=y +CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y +CONFIG_TOUCHSCREEN_USB_GOTOP=y +CONFIG_TOUCHSCREEN_USB_JASTEC=y +CONFIG_TOUCHSCREEN_USB_ELO=y +CONFIG_TOUCHSCREEN_USB_E2I=y +CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y +CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y +CONFIG_TOUCHSCREEN_USB_NEXIO=y +CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y +# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set +# CONFIG_TOUCHSCREEN_TSC_SERIO is not set +# CONFIG_TOUCHSCREEN_TSC2005 is not set +# CONFIG_TOUCHSCREEN_TSC2007 is not set +# CONFIG_TOUCHSCREEN_W90X900 is not set +# CONFIG_TOUCHSCREEN_ST1232 is not set +# CONFIG_TOUCHSCREEN_SUR40 is not set +# CONFIG_TOUCHSCREEN_TPS6507X is not set +# CONFIG_TOUCHSCREEN_ZFORCE is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_BMA150 is not set +# CONFIG_INPUT_MMA8450 is not set +# CONFIG_INPUT_MPU3050 is not set +# CONFIG_INPUT_GP2A is not set +# CONFIG_INPUT_GPIO_BEEPER is not set +# CONFIG_INPUT_GPIO_TILT_POLLED is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYCHORD is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_KXTJ9 is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +# CONFIG_INPUT_CM109 is not set +CONFIG_INPUT_UINPUT=y +# CONFIG_INPUT_GPIO is not set +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set +# CONFIG_INPUT_ADXL34X is not set +# CONFIG_INPUT_IMS_PCU is not set +# CONFIG_INPUT_CMA3000 is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_SERPORT=y +CONFIG_SERIO_AMBAKMI=y +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_SERIO_PS2MULT is not set +# CONFIG_SERIO_ARC_PS2 is not set +# CONFIG_SERIO_APBPS2 is not set +# CONFIG_SERIO_OLPC_APSP is not set +CONFIG_GAMEPORT=m +# CONFIG_GAMEPORT_NS558 is not set +# CONFIG_GAMEPORT_L4 is not set + +# +# Character devices +# +CONFIG_TTY=y +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set +# CONFIG_TRACE_SINK is not set +CONFIG_DEVMEM=y +CONFIG_DEVKMEM=y + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_AMBA_PL010 is not set +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +# CONFIG_SERIAL_KGDB_NMI is not set +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX310X is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_CONSOLE_POLL=y +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +# CONFIG_SERIAL_IFX6X60 is not set +# CONFIG_SERIAL_XILINX_PS_UART is not set +# CONFIG_SERIAL_ARC is not set +# CONFIG_SERIAL_FSL_LPUART is not set +# CONFIG_SUPPORT_SYSRQ is not set +CONFIG_TTY_PRINTK=y +# CONFIG_VIRTIO_CONSOLE is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_TIMERIOMEM is not set +# CONFIG_HW_RANDOM_ATMEL is not set +CONFIG_HW_RANDOM_MESON=y +CONFIG_HW_RANDOM_VIRTIO=m +# CONFIG_HW_RANDOM_EXYNOS is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y + +# +# Multiplexer I2C Chip support +# +# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set +# CONFIG_I2C_MUX_GPIO is not set +# CONFIG_I2C_MUX_PCA9541 is not set +# CONFIG_I2C_MUX_PCA954x is not set +# CONFIG_I2C_MUX_PINCTRL is not set +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_ALGOBIT=y + +# +# I2C Hardware Bus support +# + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_CBUS_GPIO is not set +# CONFIG_I2C_DESIGNWARE_PLATFORM is not set +CONFIG_I2C_GPIO=y +# CONFIG_I2C_NOMADIK is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PCA_PLATFORM is not set +# CONFIG_I2C_PXA_PCI is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_DIOLAN_U2C is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_ROBOTFUZZ_OSIF is not set +# CONFIG_I2C_TAOS_EVM is not set +CONFIG_I2C_TINY_USB=m + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_ALTERA is not set +CONFIG_SPI_BITBANG=y +CONFIG_SPI_GPIO=y +# CONFIG_SPI_FSL_SPI is not set +# CONFIG_SPI_OC_TINY is not set +# CONFIG_SPI_PL022 is not set +# CONFIG_SPI_PXA2XX_PCI is not set +# CONFIG_SPI_SC18IS602 is not set +# CONFIG_SPI_XCOMM is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_DESIGNWARE is not set + +# +# SPI Protocol Masters +# +CONFIG_SPI_SPIDEV=y +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_HSI is not set + +# +# PPS support +# +CONFIG_PPS=y +# CONFIG_PPS_DEBUG is not set + +# +# PPS clients support +# +# CONFIG_PPS_CLIENT_KTIMER is not set +# CONFIG_PPS_CLIENT_LDISC is not set +# CONFIG_PPS_CLIENT_GPIO is not set + +# +# PPS generators support +# + +# +# PTP clock support +# +CONFIG_PTP_1588_CLOCK=y + +# +# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. +# +CONFIG_PINCTRL=y + +# +# Pin controllers +# +CONFIG_PINMUX=y +CONFIG_PINCONF=y +# CONFIG_DEBUG_PINCTRL is not set +# CONFIG_PINCTRL_CAPRI is not set +# CONFIG_PINCTRL_MSM8X74 is not set +# CONFIG_PINCTRL_SINGLE is not set +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +CONFIG_ARCH_REQUIRE_GPIOLIB=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_DEVRES=y +CONFIG_OF_GPIO=y +# CONFIG_DEBUG_GPIO is not set +CONFIG_GPIO_SYSFS=y + +# +# Memory mapped GPIO drivers: +# +# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_PL061 is not set +# CONFIG_GPIO_SCH311X is not set +# CONFIG_GPIO_TS5500 is not set +# CONFIG_GPIO_GRGPIO is not set + +# +# I2C GPIO expanders: +# +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +# CONFIG_GPIO_PCA953X is not set +# CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_SX150X is not set +# CONFIG_GPIO_ADP5588 is not set +# CONFIG_GPIO_ADNP is not set + +# +# PCI GPIO expanders: +# + +# +# SPI GPIO expanders: +# +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MCP23S08 is not set +# CONFIG_GPIO_MC33880 is not set +# CONFIG_GPIO_74X164 is not set + +# +# AC97 GPIO expanders: +# + +# +# LPC GPIO expanders: +# + +# +# MODULbus GPIO expanders: +# +# CONFIG_GPIO_BCM_KONA is not set + +# +# USB GPIO expanders: +# +# CONFIG_W1 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_BATTERY_DS2780 is not set +# CONFIG_BATTERY_DS2781 is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_SBS is not set +# CONFIG_BATTERY_BQ27x00 is not set +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_BATTERY_MAX17042 is not set +# CONFIG_CHARGER_ISP1704 is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_GPIO is not set +# CONFIG_CHARGER_MANAGER is not set +# CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_BQ24190 is not set +# CONFIG_CHARGER_BQ24735 is not set +# CONFIG_CHARGER_SMB347 is not set +CONFIG_POWER_RESET=y +# CONFIG_POWER_RESET_GPIO is not set +CONFIG_POWER_RESET_VEXPRESS=y +# CONFIG_POWER_RESET_XGENE is not set +# CONFIG_POWER_AVS is not set +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +# +# CONFIG_SENSORS_AD7314 is not set +# CONFIG_SENSORS_AD7414 is not set +# CONFIG_SENSORS_AD7418 is not set +# CONFIG_SENSORS_ADCXX is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7310 is not set +# CONFIG_SENSORS_ADT7410 is not set +# CONFIG_SENSORS_ADT7411 is not set +# CONFIG_SENSORS_ADT7462 is not set +# CONFIG_SENSORS_ADT7470 is not set +# CONFIG_SENSORS_ADT7475 is not set +# CONFIG_SENSORS_ASC7621 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS620 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set +# CONFIG_SENSORS_G760A is not set +# CONFIG_SENSORS_G762 is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_GPIO_FAN is not set +# CONFIG_SENSORS_HIH6130 is not set +# CONFIG_SENSORS_HTU21 is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_JC42 is not set +# CONFIG_SENSORS_LINEAGE is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM70 is not set +# CONFIG_SENSORS_LM73 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_LTC4151 is not set +# CONFIG_SENSORS_LTC4215 is not set +# CONFIG_SENSORS_LTC4245 is not set +# CONFIG_SENSORS_LTC4261 is not set +# CONFIG_SENSORS_LM95234 is not set +# CONFIG_SENSORS_LM95241 is not set +# CONFIG_SENSORS_LM95245 is not set +# CONFIG_SENSORS_MAX1111 is not set +# CONFIG_SENSORS_MAX16065 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX1668 is not set +# CONFIG_SENSORS_MAX197 is not set +# CONFIG_SENSORS_MAX6639 is not set +# CONFIG_SENSORS_MAX6642 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_MAX6697 is not set +# CONFIG_SENSORS_MCP3021 is not set +# CONFIG_SENSORS_NCT6775 is not set +# CONFIG_SENSORS_NTC_THERMISTOR is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_PMBUS is not set +# CONFIG_SENSORS_SHT15 is not set +# CONFIG_SENSORS_SHT21 is not set +# CONFIG_SENSORS_SMM665 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_EMC1403 is not set +# CONFIG_SENSORS_EMC2103 is not set +# CONFIG_SENSORS_EMC6W201 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_SCH56XX_COMMON is not set +# CONFIG_SENSORS_SCH5627 is not set +# CONFIG_SENSORS_SCH5636 is not set +# CONFIG_SENSORS_ADS1015 is not set +# CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_ADS7871 is not set +# CONFIG_SENSORS_AMC6821 is not set +# CONFIG_SENSORS_INA209 is not set +# CONFIG_SENSORS_INA2XX is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_TMP102 is not set +# CONFIG_SENSORS_TMP401 is not set +# CONFIG_SENSORS_TMP421 is not set +# CONFIG_SENSORS_VEXPRESS is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83795 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83L786NG is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +CONFIG_THERMAL=y +CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_OF=y +CONFIG_THERMAL_WRITABLE_TRIPS=y +# CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE is not set +# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR=y +# CONFIG_THERMAL_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_GOV_STEP_WISE is not set +# CONFIG_THERMAL_GOV_USER_SPACE is not set +CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y +CONFIG_CPU_THERMAL=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_CPUCORE_THERMAL=y +CONFIG_GPU_THERMAL=y +CONFIG_GPUCORE_THERMAL=y +# CONFIG_THERMAL_EMULATION is not set + +# +# Texas Instruments thermal drivers +# +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_GPIO_WATCHDOG is not set +# CONFIG_ARM_SP805_WATCHDOG is not set +# CONFIG_DW_WATCHDOG is not set +# CONFIG_MEN_A21_WDT is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +CONFIG_SSB=m +CONFIG_SSB_BLOCKIO=y +CONFIG_SSB_SDIOHOST_POSSIBLE=y +CONFIG_SSB_SDIOHOST=y +# CONFIG_SSB_SILENT is not set +# CONFIG_SSB_DEBUG is not set +# CONFIG_SSB_DRIVER_GPIO is not set +CONFIG_BCMA_POSSIBLE=y + +# +# Broadcom specific AMBA +# +# CONFIG_BCMA is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=m +# CONFIG_MFD_AS3711 is not set +# CONFIG_MFD_AS3722 is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_MFD_CROS_EC is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_MFD_DA9052_SPI is not set +# CONFIG_MFD_DA9052_I2C is not set +# CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_DA9063 is not set +# CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set +# CONFIG_MFD_KEMPLD is not set +# CONFIG_MFD_88PM800 is not set +# CONFIG_MFD_88PM805 is not set +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_MAX14577 is not set +# CONFIG_MFD_MAX77686 is not set +# CONFIG_MFD_MAX77693 is not set +# CONFIG_MFD_MAX8907 is not set +# CONFIG_MFD_MAX8925 is not set +# CONFIG_MFD_MAX8997 is not set +# CONFIG_MFD_MAX8998 is not set +# CONFIG_EZX_PCAP is not set +# CONFIG_MFD_VIPERBOARD is not set +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_PCF50633 is not set +# CONFIG_UCB1400_CORE is not set +# CONFIG_MFD_RC5T583 is not set +# CONFIG_MFD_SEC_CORE is not set +# CONFIG_MFD_SI476X_CORE is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SMSC is not set +# CONFIG_ABX500_CORE is not set +# CONFIG_MFD_STMPE is not set +# CONFIG_MFD_SYSCON is not set +# CONFIG_MFD_TI_AM335X_TSCADC is not set +# CONFIG_MFD_LP3943 is not set +# CONFIG_MFD_LP8788 is not set +# CONFIG_MFD_PALMAS is not set +# CONFIG_TPS6105X is not set +# CONFIG_TPS65010 is not set +# CONFIG_TPS6507X is not set +# CONFIG_MFD_TPS65090 is not set +# CONFIG_MFD_TPS65217 is not set +# CONFIG_MFD_TPS6586X is not set +# CONFIG_MFD_TPS65910 is not set +# CONFIG_MFD_TPS65912 is not set +# CONFIG_MFD_TPS65912_I2C is not set +# CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_MFD_TPS80031 is not set +# CONFIG_TWL4030_CORE is not set +# CONFIG_TWL6040_CORE is not set +# CONFIG_MFD_WL1273_CORE is not set +# CONFIG_MFD_LM3533 is not set +# CONFIG_MFD_TC3589X is not set +# CONFIG_MFD_TMIO is not set +# CONFIG_MFD_ARIZONA_I2C is not set +# CONFIG_MFD_ARIZONA_SPI is not set +# CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X_I2C is not set +# CONFIG_MFD_WM831X_SPI is not set +# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set +CONFIG_VEXPRESS_CONFIG=y +CONFIG_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +# CONFIG_REGULATOR_FIXED_VOLTAGE is not set +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_ACT8865 is not set +# CONFIG_REGULATOR_AD5398 is not set +# CONFIG_REGULATOR_DA9210 is not set +# CONFIG_REGULATOR_FAN53555 is not set +# CONFIG_REGULATOR_GPIO is not set +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +# CONFIG_REGULATOR_LP8755 is not set +# CONFIG_REGULATOR_MAX1586 is not set +# CONFIG_REGULATOR_MAX8649 is not set +# CONFIG_REGULATOR_MAX8660 is not set +# CONFIG_REGULATOR_MAX8952 is not set +# CONFIG_REGULATOR_MAX8973 is not set +# CONFIG_REGULATOR_PFUZE100 is not set +# CONFIG_REGULATOR_TPS51632 is not set +# CONFIG_REGULATOR_TPS62360 is not set +# CONFIG_REGULATOR_TPS65023 is not set +# CONFIG_REGULATOR_TPS6507X is not set +# CONFIG_REGULATOR_TPS6524X is not set +# CONFIG_REGULATOR_VEXPRESS is not set +CONFIG_MEDIA_SUPPORT=y + +# +# Multimedia core support +# +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +CONFIG_MEDIA_RADIO_SUPPORT=y +CONFIG_MEDIA_RC_SUPPORT=y +CONFIG_MEDIA_CONTROLLER=y +CONFIG_VIDEO_DEV=y +CONFIG_VIDEO_V4L2_SUBDEV_API=y +CONFIG_VIDEO_V4L2=y +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_VIDEO_TUNER=m +CONFIG_VIDEOBUF_GEN=y +CONFIG_VIDEOBUF_VMALLOC=m +CONFIG_VIDEOBUF_RESOURCE=y +CONFIG_VIDEOBUF_DVB=m +CONFIG_VIDEOBUF2_CORE=y +CONFIG_VIDEOBUF2_MEMOPS=y +CONFIG_VIDEOBUF2_VMALLOC=m +CONFIG_DVB_CORE=y +CONFIG_DVB_NET=y +CONFIG_TTPCI_EEPROM=m +CONFIG_DVB_MAX_ADAPTERS=8 +# CONFIG_DVB_DYNAMIC_MINORS is not set + +# +# Media drivers +# +CONFIG_RC_CORE=y +CONFIG_RC_MAP=y +CONFIG_RC_DECODERS=y +CONFIG_LIRC=m +CONFIG_IR_LIRC_CODEC=m +CONFIG_IR_NEC_DECODER=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC6_DECODER=m +CONFIG_IR_JVC_DECODER=m +CONFIG_IR_SONY_DECODER=m +CONFIG_IR_RC5_SZ_DECODER=m +CONFIG_IR_SANYO_DECODER=m +CONFIG_IR_MCE_KBD_DECODER=m +CONFIG_RC_DEVICES=y +CONFIG_RC_ATI_REMOTE=m +CONFIG_IR_IMON=m +CONFIG_IR_MCEUSB=m +CONFIG_IR_REDRAT3=m +CONFIG_IR_STREAMZAP=m +CONFIG_IR_IGUANA=m +CONFIG_IR_TTUSBIR=m +CONFIG_RC_LOOPBACK=m +CONFIG_IR_GPIO_CIR=m +CONFIG_MEDIA_USB_SUPPORT=y + +# +# Webcam devices +# +CONFIG_USB_VIDEO_CLASS=m +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y +CONFIG_USB_GSPCA=m +CONFIG_USB_M5602=m +CONFIG_USB_STV06XX=m +CONFIG_USB_GL860=m +CONFIG_USB_GSPCA_BENQ=m +CONFIG_USB_GSPCA_CONEX=m +CONFIG_USB_GSPCA_CPIA1=m +CONFIG_USB_GSPCA_ETOMS=m +CONFIG_USB_GSPCA_FINEPIX=m +CONFIG_USB_GSPCA_JEILINJ=m +CONFIG_USB_GSPCA_JL2005BCD=m +CONFIG_USB_GSPCA_KINECT=m +CONFIG_USB_GSPCA_KONICA=m +CONFIG_USB_GSPCA_MARS=m +CONFIG_USB_GSPCA_MR97310A=m +CONFIG_USB_GSPCA_NW80X=m +CONFIG_USB_GSPCA_OV519=m +CONFIG_USB_GSPCA_OV534=m +CONFIG_USB_GSPCA_OV534_9=m +CONFIG_USB_GSPCA_PAC207=m +CONFIG_USB_GSPCA_PAC7302=m +CONFIG_USB_GSPCA_PAC7311=m +CONFIG_USB_GSPCA_SE401=m +CONFIG_USB_GSPCA_SN9C2028=m +CONFIG_USB_GSPCA_SN9C20X=m +CONFIG_USB_GSPCA_SONIXB=m +CONFIG_USB_GSPCA_SONIXJ=m +CONFIG_USB_GSPCA_SPCA500=m +CONFIG_USB_GSPCA_SPCA501=m +CONFIG_USB_GSPCA_SPCA505=m +CONFIG_USB_GSPCA_SPCA506=m +CONFIG_USB_GSPCA_SPCA508=m +CONFIG_USB_GSPCA_SPCA561=m +CONFIG_USB_GSPCA_SPCA1528=m +CONFIG_USB_GSPCA_SQ905=m +CONFIG_USB_GSPCA_SQ905C=m +CONFIG_USB_GSPCA_SQ930X=m +CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_STK1135=m +CONFIG_USB_GSPCA_STV0680=m +CONFIG_USB_GSPCA_SUNPLUS=m +CONFIG_USB_GSPCA_T613=m +CONFIG_USB_GSPCA_TOPRO=m +CONFIG_USB_GSPCA_TV8532=m +CONFIG_USB_GSPCA_VC032X=m +CONFIG_USB_GSPCA_VICAM=m +CONFIG_USB_GSPCA_XIRLINK_CIT=m +CONFIG_USB_GSPCA_ZC3XX=m +CONFIG_USB_PWC=m +# CONFIG_USB_PWC_DEBUG is not set +CONFIG_USB_PWC_INPUT_EVDEV=y +CONFIG_VIDEO_CPIA2=m +CONFIG_USB_ZR364XX=m +CONFIG_USB_STKWEBCAM=m +CONFIG_USB_S2255=m +CONFIG_VIDEO_USBTV=m + +# +# Analog TV USB devices +# +CONFIG_VIDEO_PVRUSB2=m +CONFIG_VIDEO_PVRUSB2_SYSFS=y +CONFIG_VIDEO_PVRUSB2_DVB=y +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set +# CONFIG_VIDEO_HDPVR is not set +CONFIG_VIDEO_TLG2300=m +CONFIG_VIDEO_USBVISION=m +CONFIG_VIDEO_STK1160_COMMON=m +CONFIG_VIDEO_STK1160_AC97=y +CONFIG_VIDEO_STK1160=m + +# +# Analog/digital TV USB devices +# +CONFIG_VIDEO_AU0828=m +CONFIG_VIDEO_AU0828_V4L2=y +CONFIG_VIDEO_CX231XX=m +CONFIG_VIDEO_CX231XX_RC=y +CONFIG_VIDEO_CX231XX_ALSA=m +CONFIG_VIDEO_CX231XX_DVB=m +CONFIG_VIDEO_TM6000=m +CONFIG_VIDEO_TM6000_ALSA=m +CONFIG_VIDEO_TM6000_DVB=m + +# +# Digital TV USB devices +# +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +CONFIG_DVB_USB_A800=m +CONFIG_DVB_USB_DIBUSB_MB=m +CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y +CONFIG_DVB_USB_DIBUSB_MC=m +CONFIG_DVB_USB_DIB0700=m +CONFIG_DVB_USB_UMT_010=m +CONFIG_DVB_USB_CXUSB=m +CONFIG_DVB_USB_M920X=m +CONFIG_DVB_USB_DIGITV=m +CONFIG_DVB_USB_VP7045=m +CONFIG_DVB_USB_VP702X=m +CONFIG_DVB_USB_GP8PSK=m +CONFIG_DVB_USB_NOVA_T_USB2=m +CONFIG_DVB_USB_TTUSB2=m +CONFIG_DVB_USB_DTT200U=m +CONFIG_DVB_USB_OPERA1=m +CONFIG_DVB_USB_AF9005=m +CONFIG_DVB_USB_AF9005_REMOTE=m +CONFIG_DVB_USB_PCTV452E=m +CONFIG_DVB_USB_DW2102=m +CONFIG_DVB_USB_CINERGY_T2=m +CONFIG_DVB_USB_DTV5100=m +CONFIG_DVB_USB_FRIIO=m +CONFIG_DVB_USB_AZ6027=m +CONFIG_DVB_USB_TECHNISAT_USB2=m +CONFIG_DVB_USB_V2=m +CONFIG_DVB_USB_AF9015=m +CONFIG_DVB_USB_AF9035=m +CONFIG_DVB_USB_ANYSEE=m +CONFIG_DVB_USB_AU6610=m +CONFIG_DVB_USB_AZ6007=m +CONFIG_DVB_USB_CE6230=m +CONFIG_DVB_USB_EC168=m +CONFIG_DVB_USB_GL861=m +CONFIG_DVB_USB_IT913X=m +CONFIG_DVB_USB_LME2510=m +CONFIG_DVB_USB_MXL111SF=m +CONFIG_DVB_USB_RTL28XXU=m +CONFIG_SMS_USB_DRV=m +CONFIG_DVB_B2C2_FLEXCOP_USB=m +# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set + +# +# Webcam, TV (analog/digital) USB devices +# +CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_V4L2=m +CONFIG_VIDEO_EM28XX_ALSA=m +CONFIG_VIDEO_EM28XX_DVB=m +CONFIG_VIDEO_EM28XX_RC=m +# CONFIG_V4L_PLATFORM_DRIVERS is not set +# CONFIG_V4L_MEM2MEM_DRIVERS is not set +# CONFIG_V4L_TEST_DRIVERS is not set + +# +# Supported MMC/SDIO adapters +# +# CONFIG_SMS_SDIO_DRV is not set +CONFIG_RADIO_ADAPTERS=y +# CONFIG_RADIO_SI470X is not set +# CONFIG_RADIO_SI4713 is not set +# CONFIG_USB_MR800 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_RADIO_SHARK is not set +# CONFIG_RADIO_SHARK2 is not set +# CONFIG_USB_KEENE is not set +# CONFIG_USB_RAREMONO is not set +# CONFIG_USB_MA901 is not set +# CONFIG_RADIO_TEA5764 is not set +# CONFIG_RADIO_SAA7706H is not set +# CONFIG_RADIO_TEF6862 is not set +# CONFIG_RADIO_WL1273 is not set + +# +# Texas Instruments WL128x FM driver (ST based) +# +# CONFIG_RADIO_WL128X is not set +CONFIG_MEDIA_COMMON_OPTIONS=y + +# +# common driver options +# +CONFIG_VIDEO_CX2341X=m +CONFIG_VIDEO_TVEEPROM=m +CONFIG_CYPRESS_FIRMWARE=m +CONFIG_DVB_B2C2_FLEXCOP=m +CONFIG_SMS_SIANO_MDTV=m +CONFIG_SMS_SIANO_RC=y + +# +# Media ancillary drivers (tuners, sensors, i2c, frontends) +# +CONFIG_MEDIA_SUBDRV_AUTOSELECT=y +CONFIG_MEDIA_ATTACH=y +CONFIG_VIDEO_IR_I2C=y + +# +# Audio decoders, processors and mixers +# +CONFIG_VIDEO_MSP3400=m +CONFIG_VIDEO_CS53L32A=m +CONFIG_VIDEO_UDA1342=m +CONFIG_VIDEO_WM8775=m +CONFIG_VIDEO_SONY_BTF_MPX=m + +# +# RDS decoders +# + +# +# Video decoders +# +CONFIG_VIDEO_SAA711X=m +CONFIG_VIDEO_TVP5150=m +CONFIG_VIDEO_TW2804=m +CONFIG_VIDEO_TW9903=m +CONFIG_VIDEO_TW9906=m + +# +# Video and audio decoders +# +CONFIG_VIDEO_CX25840=m + +# +# Video encoders +# + +# +# Camera sensor devices +# +CONFIG_VIDEO_OV7640=m +CONFIG_VIDEO_MT9V011=m + +# +# Flash devices +# + +# +# Video improvement chips +# + +# +# Audio/Video compression chips +# + +# +# Miscellaneous helper chips +# + +# +# Sensors used on soc_camera driver +# +CONFIG_MEDIA_TUNER=y +CONFIG_MEDIA_TUNER_SIMPLE=y +CONFIG_MEDIA_TUNER_TDA8290=y +CONFIG_MEDIA_TUNER_TDA827X=y +CONFIG_MEDIA_TUNER_TDA18271=y +CONFIG_MEDIA_TUNER_TDA9887=y +CONFIG_MEDIA_TUNER_TEA5761=y +CONFIG_MEDIA_TUNER_TEA5767=y +CONFIG_MEDIA_TUNER_MT20XX=y +CONFIG_MEDIA_TUNER_MT2060=m +CONFIG_MEDIA_TUNER_MT2063=m +CONFIG_MEDIA_TUNER_MT2266=m +CONFIG_MEDIA_TUNER_QT1010=m +CONFIG_MEDIA_TUNER_XC2028=y +CONFIG_MEDIA_TUNER_XC5000=y +CONFIG_MEDIA_TUNER_XC4000=y +CONFIG_MEDIA_TUNER_MXL5005S=m +CONFIG_MEDIA_TUNER_MXL5007T=m +CONFIG_MEDIA_TUNER_MC44S803=y +CONFIG_MEDIA_TUNER_MAX2165=m +CONFIG_MEDIA_TUNER_TDA18218=m +CONFIG_MEDIA_TUNER_FC0011=m +CONFIG_MEDIA_TUNER_FC0012=m +CONFIG_MEDIA_TUNER_FC0013=m +CONFIG_MEDIA_TUNER_TDA18212=m +CONFIG_MEDIA_TUNER_E4000=m +CONFIG_MEDIA_TUNER_FC2580=m +CONFIG_MEDIA_TUNER_M88TS2022=m +CONFIG_MEDIA_TUNER_TUA9001=m +CONFIG_MEDIA_TUNER_IT913X=m +CONFIG_MEDIA_TUNER_R820T=m + +# +# Multistandard (satellite) frontends +# +CONFIG_DVB_STB0899=m +CONFIG_DVB_STB6100=m +CONFIG_DVB_STV090x=m +CONFIG_DVB_STV6110x=m +CONFIG_DVB_M88DS3103=m + +# +# Multistandard (cable + terrestrial) frontends +# +CONFIG_DVB_DRXK=m +CONFIG_DVB_TDA18271C2DD=m + +# +# DVB-S (satellite) frontends +# +CONFIG_DVB_CX24123=m +CONFIG_DVB_MT312=m +CONFIG_DVB_ZL10039=m +CONFIG_DVB_S5H1420=m +CONFIG_DVB_STV0288=m +CONFIG_DVB_STB6000=m +CONFIG_DVB_STV0299=m +CONFIG_DVB_STV6110=m +CONFIG_DVB_STV0900=m +CONFIG_DVB_TDA10086=m +CONFIG_DVB_TUNER_ITD1000=m +CONFIG_DVB_TUNER_CX24113=m +CONFIG_DVB_TDA826X=m +CONFIG_DVB_CX24116=m +CONFIG_DVB_SI21XX=m +CONFIG_DVB_TS2020=m +CONFIG_DVB_DS3000=m +CONFIG_DVB_TDA10071=m + +# +# DVB-T (terrestrial) frontends +# +CONFIG_DVB_CX22702=m +CONFIG_DVB_DRXD=m +CONFIG_DVB_TDA1004X=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +CONFIG_DVB_DIB3000MB=m +CONFIG_DVB_DIB3000MC=m +CONFIG_DVB_DIB7000M=m +CONFIG_DVB_DIB7000P=m +CONFIG_DVB_TDA10048=m +CONFIG_DVB_AF9013=m +CONFIG_DVB_EC100=m +CONFIG_DVB_CXD2820R=m +CONFIG_DVB_RTL2830=m +CONFIG_DVB_RTL2832=m + +# +# DVB-C (cable) frontends +# +CONFIG_DVB_TDA10023=m +CONFIG_DVB_STV0297=m + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +CONFIG_DVB_NXT200X=m +CONFIG_DVB_BCM3510=m +CONFIG_DVB_LGDT330X=m +CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LG2160=m +CONFIG_DVB_S5H1409=m +CONFIG_DVB_AU8522=m +CONFIG_DVB_AU8522_DTV=m +CONFIG_DVB_AU8522_V4L=m +CONFIG_DVB_S5H1411=m + +# +# ISDB-T (terrestrial) frontends +# +CONFIG_DVB_S921=m +CONFIG_DVB_DIB8000=m +CONFIG_DVB_MB86A20S=m + +# +# Digital terrestrial only tuners/PLL +# +CONFIG_DVB_PLL=m +CONFIG_DVB_TUNER_DIB0070=m +CONFIG_DVB_TUNER_DIB0090=m + +# +# SEC control devices for DVB-S +# +CONFIG_DVB_LNBP21=m +CONFIG_DVB_LNBP22=m +CONFIG_DVB_ISL6421=m +CONFIG_DVB_ISL6423=m +CONFIG_DVB_A8293=m +CONFIG_DVB_LGS8GXX=m +CONFIG_DVB_ATBM8830=m +CONFIG_DVB_IX2505V=m +CONFIG_DVB_IT913X_FE=m +CONFIG_DVB_M88RS2000=m +CONFIG_DVB_AF9033=m + +# +# Tools to develop new frontends +# +# CONFIG_DVB_DUMMY_FE is not set + +# +# Graphics support +# +CONFIG_DRM=y +# CONFIG_DRM_UDL is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_HDMI=y +CONFIG_VEXPRESS_DVI_CONTROL=y +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=y +# CONFIG_FB_DDC is not set +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_IMAGEBLIT=m +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_SYS_FOPS=m +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y + +# +# Frame buffer hardware drivers +# +CONFIG_FB_ARMCLCD=y +# CONFIG_FB_UVESA is not set +# CONFIG_FB_OPENCORES is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_TMIO is not set +# CONFIG_FB_SMSCUFX is not set +# CONFIG_FB_UDL is not set +# CONFIG_FB_GOLDFISH is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_BROADSHEET is not set +# CONFIG_FB_AUO_K190X is not set +# CONFIG_FB_SIMPLE is not set +# CONFIG_EXYNOS_VIDEO is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=m +# CONFIG_LCD_L4F00242T03 is not set +# CONFIG_LCD_LMS283GF05 is not set +# CONFIG_LCD_LTV350QV is not set +# CONFIG_LCD_ILI922X is not set +# CONFIG_LCD_ILI9320 is not set +# CONFIG_LCD_TDO24M is not set +# CONFIG_LCD_VGG2432A4 is not set +# CONFIG_LCD_PLATFORM is not set +# CONFIG_LCD_S6E63M0 is not set +# CONFIG_LCD_LD9040 is not set +# CONFIG_LCD_AMS369FG06 is not set +# CONFIG_LCD_LMS501KF03 is not set +# CONFIG_LCD_HX8357 is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_GENERIC=y +# CONFIG_BACKLIGHT_PWM is not set +# CONFIG_BACKLIGHT_ADP8860 is not set +# CONFIG_BACKLIGHT_ADP8870 is not set +# CONFIG_BACKLIGHT_LM3630A is not set +# CONFIG_BACKLIGHT_LM3639 is not set +# CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_BACKLIGHT_GPIO is not set +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_BD6107 is not set +# CONFIG_ADF is not set + +# +# Console display driver support +# +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +# CONFIG_LOGO is not set +# CONFIG_FB_SSD1307 is not set +CONFIG_SOUND=y +# CONFIG_SOUND_OSS_CORE is not set +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_COMPRESS_OFFLOAD=y +CONFIG_SND_JACK=y +# CONFIG_SND_SEQUENCER is not set +# CONFIG_SND_MIXER_OSS is not set +# CONFIG_SND_PCM_OSS is not set +# CONFIG_SND_HRTIMER is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +CONFIG_SND_VMASTER=y +# CONFIG_SND_RAWMIDI_SEQ is not set +# CONFIG_SND_OPL3_LIB_SEQ is not set +# CONFIG_SND_OPL4_LIB_SEQ is not set +# CONFIG_SND_SBAWE_SEQ is not set +# CONFIG_SND_EMU10K1_SEQ is not set +CONFIG_SND_AC97_CODEC=m +CONFIG_SND_DRIVERS=y +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_ALOOP is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set +# CONFIG_SND_AC97_POWER_SAVE is not set +CONFIG_SND_SPI=y +CONFIG_SND_USB=y +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_UA101=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y +CONFIG_SND_USB_6FIRE=m +CONFIG_SND_USB_HIFACE=m +CONFIG_SND_SOC=y +# CONFIG_SND_ATMEL_SOC is not set +# CONFIG_SND_DESIGNWARE_I2S is not set +CONFIG_SND_AML_M8_SOC=y +CONFIG_SND_AML_M8=y +CONFIG_SND_AML_SPLIT_MODE=m +CONFIG_SND_AML_SPLIT_MODE_MMAP=m +CONFIG_SND_SOC_I2C_AND_SPI=y +CONFIG_SND_SOC_DUMMY_CODEC=y +CONFIG_SND_SOC_TAS5707=y +CONFIG_SND_SOC_TAS5717=y +CONFIG_SND_SOC_TAS5731=y +CONFIG_SND_SOC_AMLPMU4=y +CONFIG_SND_SOC_PCM2BT=y +CONFIG_SND_SOC_AMLT9015=y +CONFIG_SND_SOC_AMLT9015S=y +# CONFIG_SND_SIMPLE_CARD is not set +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m + +# +# HID support +# +CONFIG_HID=y +# CONFIG_HID_BATTERY_STRENGTH is not set +CONFIG_HIDRAW=y +CONFIG_UHID=y +CONFIG_HID_GENERIC=y + +# +# Special HID drivers +# +CONFIG_HID_A4TECH=m +CONFIG_HID_ACRUX=m +CONFIG_HID_ACRUX_FF=y +CONFIG_HID_APPLE=m +CONFIG_HID_APPLEIR=m +CONFIG_HID_AUREAL=m +CONFIG_HID_BELKIN=m +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +# CONFIG_HID_DIA_REMOTE is not set +CONFIG_HID_PRODIKEYS=m +CONFIG_HID_CYPRESS=m +CONFIG_HID_DRAGONRISE=m +CONFIG_DRAGONRISE_FF=y +CONFIG_HID_EMS_FF=m +CONFIG_HID_ELECOM=m +CONFIG_HID_ELO=m +CONFIG_HID_EZKEY=m +CONFIG_HID_HOLTEK=m +CONFIG_HOLTEK_FF=y +CONFIG_HID_HUION=m +CONFIG_HID_KEYTOUCH=m +CONFIG_HID_KYE=m +CONFIG_HID_UCLOGIC=m +CONFIG_HID_WALTOP=m +CONFIG_HID_GYRATION=m +CONFIG_HID_ICADE=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_KENSINGTON=m +CONFIG_HID_LCPOWER=m +# CONFIG_HID_LENOVO_TPKBD is not set +CONFIG_HID_LOGITECH=m +# CONFIG_HID_LOGITECH_DJ is not set +CONFIG_LOGITECH_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGIG940_FF=y +CONFIG_LOGIWHEELS_FF=y +CONFIG_HID_MAGICMOUSE=m +CONFIG_HID_MICROSOFT=m +CONFIG_HID_MONTEREY=m +CONFIG_HID_MULTITOUCH=m +CONFIG_HID_NTRIG=m +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=m +CONFIG_PANTHERLORD_FF=y +CONFIG_HID_PETALYNX=m +CONFIG_HID_PICOLCD=m +CONFIG_HID_PICOLCD_FB=y +CONFIG_HID_PICOLCD_BACKLIGHT=y +CONFIG_HID_PICOLCD_LCD=y +CONFIG_HID_PICOLCD_LEDS=y +CONFIG_HID_PICOLCD_CIR=y +CONFIG_HID_PRIMAX=m +CONFIG_HID_ROCCAT=m +CONFIG_HID_SAITEK=m +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SONY=m +CONFIG_SONY_FF=y +CONFIG_HID_SPEEDLINK=m +CONFIG_HID_STEELSERIES=m +CONFIG_HID_SUNPLUS=m +CONFIG_HID_GREENASIA=m +CONFIG_GREENASIA_FF=y +CONFIG_HID_SMARTJOYPLUS=m +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_HID_TIVO=m +CONFIG_HID_TOPSEED=m +CONFIG_HID_THINGM=m +CONFIG_HID_THRUSTMASTER=m +CONFIG_THRUSTMASTER_FF=y +CONFIG_HID_WACOM=m +CONFIG_HID_WIIMOTE=m +CONFIG_HID_XINMO=m +CONFIG_HID_ZEROPLUS=m +CONFIG_ZEROPLUS_FF=y +CONFIG_HID_ZYDACRON=m +CONFIG_HID_SENSOR_HUB=m + +# +# USB HID support +# +CONFIG_USB_HID=y +# CONFIG_HID_PID is not set +CONFIG_USB_HIDDEV=y + +# +# I2C HID support +# +# CONFIG_I2C_HID is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_SUPPORT=y +CONFIG_USB_COMMON=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEFAULT_PERSIST=y +# CONFIG_USB_DYNAMIC_MINORS is not set +CONFIG_USB_OTG=y +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +CONFIG_USB_MON=m +# CONFIG_USB_WUSB_CBAF is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PLATFORM=y +CONFIG_USB_EHCI_HCD=y +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EHCI_HCD_SYNOPSYS=y +# CONFIG_USB_EHCI_HCD_PLATFORM is not set +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set +# CONFIG_USB_FUSBH200_HCD is not set +# CONFIG_USB_FOTG210_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_HCD_PLATFORM is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_HCD_SSB is not set +# CONFIG_USB_HCD_TEST_MODE is not set +# CONFIG_USB_RENESAS_USBHS is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=y +# CONFIG_USB_PRINTER is not set +CONFIG_USB_WDM=m +# CONFIG_USB_TMC is not set + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_REALTEK is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_STORAGE_ENE_UB6250 is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_MUSB_HDRC is not set +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_HOST=y +# CONFIG_USB_DWC3_GADGET is not set +# CONFIG_USB_DWC3_DUAL_ROLE is not set + +# +# Platform Glue Driver Support +# +# CONFIG_USB_DWC3_EXYNOS is not set +# CONFIG_USB_DWC3_KEYSTONE is not set + +# +# Debugging features +# +# CONFIG_USB_DWC3_DEBUG is not set +# CONFIG_DWC3_HOST_USB3_LPM_ENABLE is not set +# CONFIG_USB_DWC2 is not set +# CONFIG_USB_CHIPIDEA is not set + +# +# USB port drivers +# +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_CONSOLE=y +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_SIMPLE=m +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_F81232=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_METRO=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_MXUPORT=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_QCAUX=m +CONFIG_USB_SERIAL_QUALCOMM=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_WWAN=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_SERIAL_OPTICON=m +CONFIG_USB_SERIAL_XSENS_MT=m +CONFIG_USB_SERIAL_WISHBONE=m +CONFIG_USB_SERIAL_ZTE=m +CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_QT2=m +# CONFIG_USB_SERIAL_DEBUG is not set + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +# CONFIG_USB_ADUTUX is not set +CONFIG_USB_SEVSEG=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +CONFIG_USB_APPLEDISPLAY=m +CONFIG_USB_SISUSBVGA=m +CONFIG_USB_SISUSBVGA_CON=y +CONFIG_USB_LD=m +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_IOWARRIOR=m +# CONFIG_USB_TEST is not set +# CONFIG_USB_EHSET_TEST_FIXTURE is not set +CONFIG_USB_ISIGHTFW=m +CONFIG_USB_YUREX=m +CONFIG_USB_EZUSB_FX2=m +# CONFIG_USB_HSIC_USB3503 is not set + +# +# USB Physical Layer drivers +# +CONFIG_USB_PHY=y +# CONFIG_USB_OTG_FSM is not set +# CONFIG_USB_OTG_WAKELOCK is not set +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_SAMSUNG_USB2PHY is not set +# CONFIG_SAMSUNG_USB3PHY is not set +# CONFIG_USB_GPIO_VBUS is not set +CONFIG_USB_ISP1301=y +# CONFIG_USB_RCAR_PHY is not set +CONFIG_USB_ULPI=y +CONFIG_AMLOGIC_USBPHY=y +CONFIG_AMLOGIC_USB2PHY=y +CONFIG_AMLOGIC_USB3PHY=y +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 + +# +# USB Peripheral Controller +# +# CONFIG_USB_FOTG210_UDC is not set +# CONFIG_USB_GR_UDC is not set +# CONFIG_USB_R8A66597 is not set +# CONFIG_USB_PXA27X is not set +# CONFIG_USB_MV_UDC is not set +# CONFIG_USB_MV_U3D is not set +# CONFIG_USB_M66592 is not set +# CONFIG_USB_NET2272 is not set +# CONFIG_USB_DUMMY_HCD is not set +# CONFIG_USB_CONFIGFS is not set +# CONFIG_USB_ZERO is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_ETH is not set +# CONFIG_USB_G_NCM is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FUNCTIONFS is not set +# CONFIG_USB_MASS_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +# CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_NOKIA is not set +# CONFIG_USB_G_ACM_MS is not set +# CONFIG_USB_G_MULTI is not set +# CONFIG_USB_G_HID is not set +# CONFIG_USB_G_DBGP is not set +# CONFIG_USB_G_WEBCAM is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_PXP_MMC=y +CONFIG_MMC_UNSAFE_RESUME=y +# CONFIG_MMC_CLKGATE is not set +# CONFIG_MMC_EMBEDDED_SDIO is not set +# CONFIG_MMC_PARANOID_SD_INIT is not set + +# +# MMC/SD/SDIO Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_MINORS=32 +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_MMC_BLOCK_DEFERRED_RESUME is not set +# CONFIG_SDIO_UART is not set +# CONFIG_MMC_TEST is not set + +# +# MMC/SD/SDIO Host Controller Drivers +# +CONFIG_MMC_ARMMMCI=y +# CONFIG_MMC_SDHCI is not set +# CONFIG_MMC_SDHCI_PXAV3 is not set +# CONFIG_MMC_SDHCI_PXAV2 is not set +# CONFIG_MMC_SPI is not set +# CONFIG_MMC_VUB300 is not set +# CONFIG_MMC_USHC is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_LM3530 is not set +# CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_PCA9532 is not set +CONFIG_LEDS_GPIO=y +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_LP5521 is not set +# CONFIG_LEDS_LP5523 is not set +# CONFIG_LEDS_LP5562 is not set +# CONFIG_LEDS_LP8501 is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_PCA963X is not set +# CONFIG_LEDS_PCA9685 is not set +# CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_PWM is not set +# CONFIG_LEDS_REGULATOR is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_LT3593 is not set +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_OT200 is not set +# CONFIG_LEDS_BLINKM is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_ONESHOT=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_GPIO=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y + +# +# iptables trigger is under Netfilter config (LED target) +# +CONFIG_LEDS_TRIGGER_TRANSIENT=y +CONFIG_LEDS_TRIGGER_CAMERA=y +CONFIG_SWITCH=y +# CONFIG_SWITCH_GPIO is not set +# CONFIG_ACCESSIBILITY is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1374=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_DS3232=m +CONFIG_RTC_DRV_HYM8563=m +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_ISL12022=m +CONFIG_RTC_DRV_ISL12057=m +CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF2127=m +CONFIG_RTC_DRV_PCF8523=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_M41T80=m +# CONFIG_RTC_DRV_M41T80_WDT is not set +CONFIG_RTC_DRV_BQ32K=m +CONFIG_RTC_DRV_S35390A=m +CONFIG_RTC_DRV_FM3130=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_RX8025=m +CONFIG_RTC_DRV_EM3027=m +CONFIG_RTC_DRV_RV3029C2=m + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_M41T93 is not set +# CONFIG_RTC_DRV_M41T94 is not set +# CONFIG_RTC_DRV_DS1305 is not set +# CONFIG_RTC_DRV_DS1390 is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_R9701 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_DS3234 is not set +# CONFIG_RTC_DRV_PCF2123 is not set +# CONFIG_RTC_DRV_RX4581 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_V3020 is not set +# CONFIG_RTC_DRV_DS2404 is not set + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_PL030 is not set +CONFIG_RTC_DRV_PL031=y +# CONFIG_RTC_DRV_SNVS is not set +# CONFIG_RTC_DRV_MOXART is not set + +# +# HID Sensor RTC drivers +# +# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +CONFIG_UIO=y +CONFIG_UIO_PDRV_GENIRQ=y +# CONFIG_UIO_DMEM_GENIRQ is not set +CONFIG_VIRT_DRIVERS=y +CONFIG_VIRTIO=y + +# +# Virtio drivers +# +CONFIG_VIRTIO_BALLOON=m +CONFIG_VIRTIO_MMIO=y +# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set + +# +# Microsoft Hyper-V guest support +# +CONFIG_STAGING=y +CONFIG_USBIP_CORE=m +CONFIG_USBIP_VHCI_HCD=m +CONFIG_USBIP_HOST=m +# CONFIG_USBIP_DEBUG is not set +CONFIG_W35UND=m +CONFIG_PRISM2_USB=m +# CONFIG_ECHO is not set +# CONFIG_COMEDI is not set +CONFIG_RTLLIB=m +CONFIG_RTLLIB_CRYPTO_CCMP=m +CONFIG_RTLLIB_CRYPTO_TKIP=m +CONFIG_RTLLIB_CRYPTO_WEP=m +CONFIG_R8712U=m +CONFIG_R8188EU=m +CONFIG_88EU_AP_MODE=y +CONFIG_88EU_P2P=y +CONFIG_RTS5139=m +CONFIG_RTS5139_DEBUG=y +# CONFIG_TRANZPORT is not set +CONFIG_LINE6_USB=m +# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set +CONFIG_USB_SERIAL_QUATECH2=m +CONFIG_VT6656=m +CONFIG_USB_ENESTORAGE=m +CONFIG_BCM_WIMAX=m +# CONFIG_FT1000 is not set + +# +# Speakup console speech +# +# CONFIG_SPEAKUP is not set +# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set +# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set +CONFIG_STAGING_MEDIA=y +CONFIG_DVB_AS102=m +CONFIG_I2C_BCM2048=m +CONFIG_VIDEO_GO7007=m +CONFIG_VIDEO_GO7007_USB=m +CONFIG_VIDEO_GO7007_LOADER=m +CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m +CONFIG_USB_MSI3101=m +# CONFIG_VIDEO_TCM825X is not set +CONFIG_USB_SN9C102=m +CONFIG_LIRC_STAGING=y +CONFIG_LIRC_IGORPLUGUSB=m +CONFIG_LIRC_IMON=m +CONFIG_LIRC_SASEM=m +CONFIG_LIRC_SERIAL=m +CONFIG_LIRC_SERIAL_TRANSMITTER=y +CONFIG_LIRC_SIR=m +CONFIG_LIRC_ZILOG=m + +# +# Android +# +CONFIG_ANDROID=y +# CONFIG_ANDROID_BINDER_IPC is not set +# CONFIG_ASHMEM is not set +# CONFIG_ANDROID_LOGGER is not set +# CONFIG_ANDROID_TIMED_OUTPUT is not set +# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set +# CONFIG_ANDROID_INTF_ALARM_DEV is not set +CONFIG_SYNC=y +CONFIG_SW_SYNC=y +# CONFIG_SW_SYNC_USER is not set +CONFIG_ION=y +# CONFIG_ION_TEST is not set +# CONFIG_ION_DUMMY is not set +# CONFIG_FIQ_DEBUGGER is not set +# CONFIG_FIQ_WATCHDOG is not set +# CONFIG_USB_WPAN_HCD is not set +# CONFIG_WIMAX_GDM72XX is not set +# CONFIG_LTE_GDM724X is not set +# CONFIG_CED1401 is not set +# CONFIG_DGRP is not set +# CONFIG_MTD_SPINAND_MT29F is not set +# CONFIG_LUSTRE_FS is not set +# CONFIG_XILLYBUS is not set +# CONFIG_DGAP is not set +CONFIG_CLKDEV_LOOKUP=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_COMMON_CLK=y + +# +# Common Clock Framework +# +CONFIG_COMMON_CLK_VERSATILE=y +# CONFIG_COMMON_CLK_SI5351 is not set +# CONFIG_COMMON_CLK_SI570 is not set +CONFIG_COMMON_CLK_XGENE=y +CONFIG_COMMON_CLK_SCPI=y +# CONFIG_COMMON_CLK_QCOM is not set + +# +# Hardware Spinlock drivers +# +CONFIG_CLKSRC_OF=y +CONFIG_ARM_ARCH_TIMER=y +CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y +CONFIG_MAILBOX=y +# CONFIG_PL320_MBOX is not set +CONFIG_IOMMU_SUPPORT=y +CONFIG_OF_IOMMU=y +# CONFIG_ARM_SMMU is not set + +# +# Remoteproc drivers +# +# CONFIG_STE_MODEM_RPROC is not set + +# +# Rpmsg drivers +# +CONFIG_PM_DEVFREQ=y + +# +# DEVFREQ Governors +# +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_USERSPACE=y + +# +# DEVFREQ Drivers +# +# CONFIG_EXTCON is not set +# CONFIG_MEMORY is not set +# CONFIG_IIO is not set +CONFIG_PWM=y +CONFIG_PWM_SYSFS=y +# CONFIG_PWM_PCA9685 is not set +CONFIG_IRQCHIP=y +CONFIG_ARM_GIC=y +CONFIG_ARM_GIC_V3=y +# CONFIG_IPACK_BUS is not set +CONFIG_RESET_CONTROLLER=y +# CONFIG_FMC is not set + +# +# PHY Subsystem +# +# CONFIG_GENERIC_PHY is not set +# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set +# CONFIG_PHY_EXYNOS_DP_VIDEO is not set +# CONFIG_POWERCAP is not set +# CONFIG_GATOR is not set +CONFIG_CORESIGHT=y +CONFIG_CORESIGHT_LINKS_AND_SINKS=y +# CONFIG_CORESIGHT_LINK_AND_SINK_TMC is not set +CONFIG_CORESIGHT_SINK_TPIU=y +CONFIG_CORESIGHT_SINK_ETBV10=y +CONFIG_CORESIGHT_SOURCE_ETM4X=y +CONFIG_CORESIGHT_QCOM_REPLICATOR=y + +# +# Mali GPU OpenGL device driver +# +CONFIG_MALI400=m +# CONFIG_MALI470 is not set +# CONFIG_MALI400_DEBUG is not set +# CONFIG_MALI400_PROFILING is not set +# CONFIG_MALI400_UMP is not set +# CONFIG_MALI_DVFS is not set +CONFIG_MALI_DMA_BUF_MAP_ON_ATTACH=y +CONFIG_MALI_SHARED_INTERRUPTS=y +# CONFIG_MALI_PMU_PARALLEL_POWER_UP is not set +CONFIG_MALI_DT=y +# CONFIG_MALI_DEVFREQ is not set +# CONFIG_MALI_QUIET is not set + +# +# File systems +# +CONFIG_DCACHE_WORD_ACCESS=y +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_USE_FOR_EXT23=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_EXT4_DEBUG=y +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +CONFIG_REISERFS_PROC_INFO=y +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +CONFIG_JFS_FS=m +# CONFIG_JFS_POSIX_ACL is not set +# CONFIG_JFS_SECURITY is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set +CONFIG_XFS_FS=m +# CONFIG_XFS_QUOTA is not set +# CONFIG_XFS_POSIX_ACL is not set +# CONFIG_XFS_RT is not set +# CONFIG_XFS_WARN is not set +# CONFIG_XFS_DEBUG is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +CONFIG_BTRFS_FS=y +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set +CONFIG_BTRFS_FS_RUN_SANITY_TESTS=y +# CONFIG_BTRFS_DEBUG is not set +# CONFIG_BTRFS_ASSERT is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_EXPORTFS=y +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_QUOTA=y +# CONFIG_QUOTA_NETLINK_INTERFACE is not set +CONFIG_PRINT_QUOTA_WARNING=y +# CONFIG_QUOTA_DEBUG is not set +CONFIG_QUOTA_TREE=y +# CONFIG_QFMT_V1 is not set +CONFIG_QFMT_V2=y +CONFIG_QUOTACTL=y +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=y +# CONFIG_CUSE is not set + +# +# Caches +# +CONFIG_FSCACHE=y +# CONFIG_FSCACHE_STATS is not set +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set +CONFIG_CACHEFILES=y +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=y +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="ascii" +# CONFIG_EXFAT_FS is not set +CONFIG_NTFS_FS=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_RW=y + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_CONFIGFS_FS=y +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +CONFIG_ECRYPT_FS=m +CONFIG_ECRYPT_FS_MESSAGING=y +CONFIG_HFS_FS=m +CONFIG_HFSPLUS_FS=m +# CONFIG_HFSPLUS_FS_POSIX_ACL is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +CONFIG_JFFS2_RUBIN=y +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +CONFIG_UBIFS_FS=y +CONFIG_UBIFS_FS_ADVANCED_COMPR=y +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +# CONFIG_LOGFS is not set +CONFIG_CRAMFS=y +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_FILE_CACHE=y +# CONFIG_SQUASHFS_FILE_DIRECT is not set +CONFIG_SQUASHFS_DECOMP_SINGLE=y +# CONFIG_SQUASHFS_DECOMP_MULTI is not set +# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_OMFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX6FS_FS is not set +CONFIG_ROMFS_FS=y +CONFIG_ROMFS_BACKED_BY_BLOCK=y +# CONFIG_ROMFS_BACKED_BY_MTD is not set +# CONFIG_ROMFS_BACKED_BY_BOTH is not set +CONFIG_ROMFS_ON_BLOCK=y +# CONFIG_PSTORE is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_F2FS_FS=m +CONFIG_F2FS_STAT_FS=y +CONFIG_F2FS_FS_XATTR=y +# CONFIG_F2FS_FS_POSIX_ACL is not set +# CONFIG_F2FS_FS_SECURITY is not set +# CONFIG_F2FS_CHECK_FS is not set +CONFIG_AUFS_FS=m +CONFIG_AUFS_BRANCH_MAX_127=y +# CONFIG_AUFS_BRANCH_MAX_511 is not set +# CONFIG_AUFS_BRANCH_MAX_1023 is not set +# CONFIG_AUFS_BRANCH_MAX_32767 is not set +CONFIG_AUFS_SBILIST=y +# CONFIG_AUFS_HNOTIFY is not set +# CONFIG_AUFS_EXPORT is not set +# CONFIG_AUFS_XATTR is not set +# CONFIG_AUFS_FHSM is not set +# CONFIG_AUFS_RDU is not set +# CONFIG_AUFS_SHWH is not set +# CONFIG_AUFS_BR_RAMFS is not set +# CONFIG_AUFS_BR_FUSE is not set +CONFIG_AUFS_BR_HFSPLUS=y +CONFIG_AUFS_BDEV_LOOP=y +# CONFIG_AUFS_DEBUG is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V2=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +CONFIG_NFS_SWAP=y +CONFIG_NFS_V4_1=y +# CONFIG_NFS_V4_2 is not set +CONFIG_PNFS_FILE_LAYOUT=y +CONFIG_PNFS_BLOCK=m +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" +# CONFIG_NFS_V4_1_MIGRATION is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFS_FSCACHE is not set +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +# CONFIG_NFSD_V4_SECURITY_LABEL is not set +# CONFIG_NFSD_FAULT_INJECTION is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_SUNRPC_BACKCHANNEL=y +CONFIG_SUNRPC_SWAP=y +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_SUNRPC_DEBUG is not set +# CONFIG_CEPH_FS is not set +CONFIG_CIFS=y +CONFIG_CIFS_STATS=y +CONFIG_CIFS_STATS2=y +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_UPCALL is not set +CONFIG_CIFS_XATTR=y +# CONFIG_CIFS_POSIX is not set +# CONFIG_CIFS_ACL is not set +# CONFIG_CIFS_DEBUG is not set +CONFIG_CIFS_DFS_UPCALL=y +CONFIG_CIFS_SMB2=y +# CONFIG_CIFS_FSCACHE is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_MAC_ROMAN is not set +# CONFIG_NLS_MAC_CELTIC is not set +# CONFIG_NLS_MAC_CENTEURO is not set +# CONFIG_NLS_MAC_CROATIAN is not set +# CONFIG_NLS_MAC_CYRILLIC is not set +# CONFIG_NLS_MAC_GAELIC is not set +# CONFIG_NLS_MAC_GREEK is not set +# CONFIG_NLS_MAC_ICELAND is not set +# CONFIG_NLS_MAC_INUIT is not set +# CONFIG_NLS_MAC_ROMANIAN is not set +# CONFIG_NLS_MAC_TURKISH is not set +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +# CONFIG_VIRTUALIZATION is not set + +# +# Kernel hacking +# + +# +# printk and dmesg options +# +CONFIG_PRINTK_TIME=y +CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DYNAMIC_DEBUG is not set + +# +# Compile-time checks and compiler options +# +# CONFIG_DEBUG_INFO is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_FRAME_WARN=2048 +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_READABLE_ASM is not set +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_FS=y +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 +CONFIG_DEBUG_KERNEL=y + +# +# Memory Debugging +# +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_DEBUG_SHIRQ is not set + +# +# Debug Lockups and Hangs +# +# CONFIG_LOCKUP_DETECTOR is not set +# CONFIG_DETECT_HUNG_TASK is not set +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 +CONFIG_PANIC_TIMEOUT=0 +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_PREEMPT is not set + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +CONFIG_STACKTRACE=y +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_HAVE_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_WRITECOUNT is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set + +# +# RCU Debugging +# +# CONFIG_PROVE_RCU_DELAY is not set +# CONFIG_SPARSE_RCU_POINTER is not set +# CONFIG_RCU_TORTURE_TEST is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=21 +CONFIG_RCU_CPU_STALL_VERBOSE=y +# CONFIG_RCU_CPU_STALL_INFO is not set +CONFIG_RCU_TRACE=y +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_NOTIFIER_ERROR_INJECTION is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_NOP_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_TRACE_CLOCK=y +CONFIG_RING_BUFFER=y +CONFIG_EVENT_TRACING=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_TRACING=y +CONFIG_GENERIC_TRACER=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +CONFIG_FUNCTION_TRACER=y +CONFIG_FUNCTION_GRAPH_TRACER=y +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_PREEMPT_TRACER is not set +# CONFIG_SCHED_TRACER is not set +# CONFIG_FTRACE_SYSCALLS is not set +# CONFIG_TRACER_SNAPSHOT is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +CONFIG_STACK_TRACER=y +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_PROBE_EVENTS is not set +CONFIG_DYNAMIC_FTRACE=y +CONFIG_FUNCTION_PROFILER=y +CONFIG_FTRACE_MCOUNT_RECORD=y +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_RING_BUFFER_BENCHMARK is not set +# CONFIG_RING_BUFFER_STARTUP_TEST is not set + +# +# Runtime Testing +# +# CONFIG_LKDTM is not set +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_RBTREE_TEST is not set +# CONFIG_INTERVAL_TREE_TEST is not set +# CONFIG_PERCPU_TEST is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_ASYNC_RAID6_TEST is not set +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_TEST_MODULE is not set +# CONFIG_TEST_USER_COPY is not set +# CONFIG_CHECK_ISR_TIME is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_KGDB=y +CONFIG_KGDB_SERIAL_CONSOLE=y +CONFIG_KGDB_TESTS=y +# CONFIG_KGDB_TESTS_ON_BOOT is not set +# CONFIG_KGDB_KDB is not set +CONFIG_EARLY_PRINTK=y +# CONFIG_PID_IN_CONTEXTIDR is not set + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_PERSISTENT_KEYRINGS is not set +# CONFIG_BIG_KEYS is not set +# CONFIG_ENCRYPTED_KEYS is not set +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_SECURITY=y +CONFIG_SECURITYFS=y +CONFIG_SECURITY_NETWORK=y +# CONFIG_SECURITY_NETWORK_XFRM is not set +CONFIG_SECURITY_PATH=y +CONFIG_LSM_MMAP_MIN_ADDR=32768 +CONFIG_SECURITY_SELINUX=y +# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set +# CONFIG_SECURITY_SELINUX_DISABLE is not set +CONFIG_SECURITY_SELINUX_DEVELOP=y +CONFIG_SECURITY_SELINUX_AVC_STATS=y +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set +CONFIG_SECURITY_SMACK=y +# CONFIG_SECURITY_TOMOYO is not set +CONFIG_SECURITY_APPARMOR=y +CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1 +CONFIG_SECURITY_APPARMOR_HASH=y +# CONFIG_SECURITY_YAMA is not set +# CONFIG_IMA is not set +# CONFIG_EVM is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +CONFIG_DEFAULT_SECURITY_APPARMOR=y +# CONFIG_DEFAULT_SECURITY_DAC is not set +CONFIG_DEFAULT_SECURITY="apparmor" +CONFIG_XOR_BLOCKS=y +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_XOR=m +CONFIG_ASYNC_PQ=m +CONFIG_ASYNC_RAID6_RECOV=m +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=m +CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_USER=m +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_PCRYPT=m +CONFIG_CRYPTO_WORKQUEUE=y +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_AUTHENC=y +# CONFIG_CRYPTO_TEST is not set +CONFIG_CRYPTO_ABLK_HELPER=m + +# +# Authenticated Encryption with Associated Data +# +CONFIG_CRYPTO_CCM=y +CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_SEQIV=y + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CTR=y +CONFIG_CRYPTO_CTS=m +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_PCBC=y +CONFIG_CRYPTO_XTS=m + +# +# Hash modes +# +CONFIG_CRYPTO_CMAC=y +CONFIG_CRYPTO_HMAC=y +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_CRC32=m +CONFIG_CRYPTO_CRCT10DIF=y +CONFIG_CRYPTO_GHASH=m +CONFIG_CRYPTO_MD4=y +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_RMD128=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_RMD256=m +CONFIG_CRYPTO_RMD320=m +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_WP512=m + +# +# Ciphers +# +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=y +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_BLOWFISH_COMMON=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST_COMMON=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_SALSA20=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_ZLIB=m +CONFIG_CRYPTO_LZO=y +CONFIG_CRYPTO_LZ4=m +CONFIG_CRYPTO_LZ4HC=m + +# +# Random Number Generation +# +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_USER_API=m +CONFIG_CRYPTO_USER_API_HASH=m +CONFIG_CRYPTO_USER_API_SKCIPHER=m +CONFIG_CRYPTO_HASH_INFO=y +CONFIG_CRYPTO_HW=y +CONFIG_ASYMMETRIC_KEY_TYPE=m +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m +CONFIG_PUBLIC_KEY_ALGO_RSA=m +CONFIG_X509_CERTIFICATE_PARSER=m +CONFIG_ARM64_CRYPTO=y +CONFIG_CRYPTO_SHA1_ARM64_CE=m +CONFIG_CRYPTO_SHA2_ARM64_CE=m +CONFIG_CRYPTO_GHASH_ARM64_CE=m +CONFIG_CRYPTO_AES_ARM64_CE=m +CONFIG_CRYPTO_AES_ARM64_CE_CCM=m +CONFIG_CRYPTO_AES_ARM64_CE_BLK=m +CONFIG_CRYPTO_AES_ARM64_NEON_BLK=m +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_RAID6_PQ=y +CONFIG_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_IO=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +CONFIG_CRC_T10DIF=y +CONFIG_CRC_ITU_T=y +CONFIG_CRC32=y +# CONFIG_CRC32_SELFTEST is not set +CONFIG_CRC32_SLICEBY8=y +# CONFIG_CRC32_SLICEBY4 is not set +# CONFIG_CRC32_SARWATE is not set +# CONFIG_CRC32_BIT is not set +CONFIG_CRC7=y +CONFIG_LIBCRC32C=y +# CONFIG_CRC8 is not set +CONFIG_AUDIT_GENERIC=y +# CONFIG_RANDOM32_SELFTEST is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_COMPRESS=m +CONFIG_LZ4HC_COMPRESS=m +CONFIG_LZ4_DECOMPRESS=y +CONFIG_XZ_DEC=y +# CONFIG_XZ_DEC_X86 is not set +# CONFIG_XZ_DEC_POWERPC is not set +# CONFIG_XZ_DEC_IA64 is not set +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +# CONFIG_XZ_DEC_SPARC is not set +CONFIG_XZ_DEC_BCJ=y +# CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_XZ=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_LZ4=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=y +CONFIG_TEXTSEARCH_BM=y +CONFIG_TEXTSEARCH_FSM=y +CONFIG_ASSOCIATIVE_ARRAY=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_DMA=y +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_NLATTR=y +CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y +CONFIG_AVERAGE=y +CONFIG_CLZ_TAB=y +CONFIG_CORDIC=m +# CONFIG_DDR is not set +CONFIG_MPILIB=m +CONFIG_LIBFDT=y +CONFIG_OID_REGISTRY=y +CONFIG_FONT_SUPPORT=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y