mirror of
https://github.com/openwrt/openwrt.git
synced 2026-06-17 14:50:15 +04:00
rockchip: restore files for v6.12
This is an automatically generated commit which aids following Kernel patch history, as git will see the move and copy as a rename thus defeating the purpose. For the original discussion see: https://lists.openwrt.org/pipermail/openwrt-devel/2023-October/041673.html Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org> Link: https://github.com/openwrt/openwrt/pull/23139 Signed-off-by: Nick Hainke <vincent@systemli.org>
This commit is contained in:
committed by
Nick Hainke
parent
2c9986eedd
commit
86e3c31bcc
@@ -0,0 +1,749 @@
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS=y
|
||||
CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
|
||||
CONFIG_ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG=y
|
||||
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
|
||||
CONFIG_ARCH_FORCE_MAX_ORDER=10
|
||||
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
|
||||
CONFIG_ARCH_KEEP_MEMBLOCK=y
|
||||
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
|
||||
CONFIG_ARCH_MMAP_RND_BITS=18
|
||||
CONFIG_ARCH_MMAP_RND_BITS_MAX=33
|
||||
CONFIG_ARCH_MMAP_RND_BITS_MIN=18
|
||||
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
|
||||
CONFIG_ARCH_PKEY_BITS=3
|
||||
CONFIG_ARCH_PROC_KCORE_TEXT=y
|
||||
CONFIG_ARCH_ROCKCHIP=y
|
||||
CONFIG_ARCH_SELECTS_KEXEC_FILE=y
|
||||
CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
||||
CONFIG_ARCH_STACKWALK=y
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
CONFIG_ARCH_WANTS_EXECMEM_LATE=y
|
||||
CONFIG_ARCH_WANTS_NO_INSTR=y
|
||||
CONFIG_ARCH_WANTS_THP_SWAP=y
|
||||
CONFIG_ARC_EMAC_CORE=y
|
||||
CONFIG_ARM64=y
|
||||
CONFIG_ARM64_4K_PAGES=y
|
||||
CONFIG_ARM64_ERRATUM_1024718=y
|
||||
CONFIG_ARM64_ERRATUM_1165522=y
|
||||
CONFIG_ARM64_ERRATUM_1286807=y
|
||||
CONFIG_ARM64_ERRATUM_1319367=y
|
||||
CONFIG_ARM64_ERRATUM_1463225=y
|
||||
CONFIG_ARM64_ERRATUM_1530923=y
|
||||
CONFIG_ARM64_ERRATUM_2051678=y
|
||||
CONFIG_ARM64_ERRATUM_2054223=y
|
||||
CONFIG_ARM64_ERRATUM_2067961=y
|
||||
CONFIG_ARM64_ERRATUM_2077057=y
|
||||
CONFIG_ARM64_ERRATUM_2441007=y
|
||||
CONFIG_ARM64_ERRATUM_2441009=y
|
||||
CONFIG_ARM64_ERRATUM_2658417=y
|
||||
CONFIG_ARM64_ERRATUM_3117295=y
|
||||
CONFIG_ARM64_ERRATUM_819472=y
|
||||
CONFIG_ARM64_ERRATUM_824069=y
|
||||
CONFIG_ARM64_ERRATUM_826319=y
|
||||
CONFIG_ARM64_ERRATUM_827319=y
|
||||
CONFIG_ARM64_ERRATUM_832075=y
|
||||
CONFIG_ARM64_ERRATUM_843419=y
|
||||
CONFIG_ARM64_ERRATUM_858921=y
|
||||
CONFIG_ARM64_HW_AFDBM=y
|
||||
CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y
|
||||
CONFIG_ARM64_PA_BITS=48
|
||||
CONFIG_ARM64_PA_BITS_48=y
|
||||
CONFIG_ARM64_PLATFORM_DEVICES=y
|
||||
CONFIG_ARM64_PTR_AUTH=y
|
||||
CONFIG_ARM64_PTR_AUTH_KERNEL=y
|
||||
CONFIG_ARM64_RAS_EXTN=y
|
||||
CONFIG_ARM64_SVE=y
|
||||
CONFIG_ARM64_TAGGED_ADDR_ABI=y
|
||||
CONFIG_ARM64_VA_BITS=48
|
||||
# CONFIG_ARM64_VA_BITS_39 is not set
|
||||
CONFIG_ARM64_VA_BITS_48=y
|
||||
CONFIG_ARM64_WORKAROUND_CLEAN_CACHE=y
|
||||
CONFIG_ARM64_WORKAROUND_REPEAT_TLBI=y
|
||||
CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT=y
|
||||
CONFIG_ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD=y
|
||||
CONFIG_ARM64_WORKAROUND_TSB_FLUSH_FAILURE=y
|
||||
CONFIG_ARM_AMBA=y
|
||||
CONFIG_ARM_ARCH_TIMER=y
|
||||
CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
|
||||
CONFIG_ARM_ARCH_TIMER_OOL_WORKAROUND=y
|
||||
CONFIG_ARM_GIC=y
|
||||
CONFIG_ARM_GIC_V2M=y
|
||||
CONFIG_ARM_GIC_V3=y
|
||||
CONFIG_ARM_GIC_V3_ITS=y
|
||||
CONFIG_ARM_MHU=y
|
||||
CONFIG_ARM_MHU_V2=y
|
||||
# CONFIG_ARM_MHU_V3 is not set
|
||||
CONFIG_ARM_PSCI_CPUIDLE=y
|
||||
CONFIG_ARM_PSCI_CPUIDLE_DOMAIN=y
|
||||
CONFIG_ARM_PSCI_FW=y
|
||||
# CONFIG_ARM_RK3399_DMC_DEVFREQ is not set
|
||||
CONFIG_ARM_SCMI_CPUFREQ=y
|
||||
# CONFIG_ARM_SCMI_DEBUG_COUNTERS is not set
|
||||
CONFIG_ARM_SCMI_HAVE_SHMEM=y
|
||||
CONFIG_ARM_SCMI_HAVE_TRANSPORT=y
|
||||
CONFIG_ARM_SCMI_PERF_DOMAIN=y
|
||||
CONFIG_ARM_SCMI_POWER_CONTROL=y
|
||||
CONFIG_ARM_SCMI_POWER_DOMAIN=y
|
||||
CONFIG_ARM_SCMI_PROTOCOL=y
|
||||
# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set
|
||||
CONFIG_ARM_SCMI_TRANSPORT_MAILBOX=y
|
||||
CONFIG_ARM_SCMI_TRANSPORT_SMC=y
|
||||
CONFIG_ARM_SCMI_TRANSPORT_SMC_ATOMIC_ENABLE=y
|
||||
CONFIG_ARM_SCPI_CPUFREQ=y
|
||||
CONFIG_ARM_SCPI_POWER_DOMAIN=y
|
||||
CONFIG_ARM_SCPI_PROTOCOL=y
|
||||
CONFIG_ARM_SMMU=y
|
||||
CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT=y
|
||||
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
|
||||
CONFIG_ARM_SMMU_V3=y
|
||||
# CONFIG_ARM_SMMU_V3_SVA is not set
|
||||
CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
CONFIG_BACKLIGHT_GPIO=y
|
||||
CONFIG_BACKLIGHT_PWM=y
|
||||
CONFIG_BLK_DEV_BSG=y
|
||||
CONFIG_BLK_DEV_BSGLIB=y
|
||||
CONFIG_BLK_DEV_BSG_COMMON=y
|
||||
# CONFIG_BLK_DEV_INITRD is not set
|
||||
CONFIG_BLK_DEV_INTEGRITY=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_NVME=y
|
||||
CONFIG_BLK_DEV_PCIESSD_MTIP32XX=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_BLK_MQ_PCI=y
|
||||
CONFIG_BLK_PM=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_BUFFER_HEAD=y
|
||||
CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC=y
|
||||
CONFIG_CC_HAVE_SHADOW_CALL_STACK=y
|
||||
CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
|
||||
CONFIG_CHARGER_GPIO=y
|
||||
# CONFIG_CHARGER_RK817 is not set
|
||||
CONFIG_CLKSRC_MMIO=y
|
||||
CONFIG_CLK_PX30=y
|
||||
CONFIG_CLK_RK3308=y
|
||||
CONFIG_CLK_RK3328=y
|
||||
CONFIG_CLK_RK3368=y
|
||||
CONFIG_CLK_RK3399=y
|
||||
CONFIG_CLK_RK3528=y
|
||||
CONFIG_CLK_RK3568=y
|
||||
CONFIG_CLK_RK3576=y
|
||||
CONFIG_CLK_RK3588=y
|
||||
CONFIG_CLONE_BACKWARDS=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_CMA_ALIGNMENT=8
|
||||
CONFIG_CMA_AREAS=7
|
||||
# CONFIG_CMA_DEBUGFS is not set
|
||||
CONFIG_CMA_SIZE_MBYTES=16
|
||||
# CONFIG_CMA_SIZE_SEL_MAX is not set
|
||||
CONFIG_CMA_SIZE_SEL_MBYTES=y
|
||||
# CONFIG_CMA_SIZE_SEL_MIN is not set
|
||||
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
|
||||
# CONFIG_CMA_SYSFS is not set
|
||||
CONFIG_COMMON_CLK=y
|
||||
CONFIG_COMMON_CLK_RK808=y
|
||||
CONFIG_COMMON_CLK_ROCKCHIP=y
|
||||
CONFIG_COMMON_CLK_SCMI=y
|
||||
CONFIG_COMMON_CLK_SCPI=y
|
||||
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
|
||||
CONFIG_COMPAT_32BIT_TIME=y
|
||||
CONFIG_CONFIGFS_FS=y
|
||||
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_CONTEXT_TRACKING=y
|
||||
CONFIG_CONTEXT_TRACKING_IDLE=y
|
||||
CONFIG_CONTIG_ALLOC=y
|
||||
CONFIG_CPUFREQ_DT=y
|
||||
CONFIG_CPUFREQ_DT_PLATDEV=y
|
||||
CONFIG_CPU_FREQ=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
||||
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
|
||||
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
|
||||
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
|
||||
# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y
|
||||
CONFIG_CPU_ISOLATION=y
|
||||
CONFIG_CPU_LITTLE_ENDIAN=y
|
||||
CONFIG_CPU_MITIGATIONS=y
|
||||
CONFIG_CPU_PM=y
|
||||
CONFIG_CPU_RMAP=y
|
||||
CONFIG_CPU_THERMAL=y
|
||||
CONFIG_CRASH_DUMP=y
|
||||
CONFIG_CRASH_RESERVE=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRC64=y
|
||||
CONFIG_CRC64_ROCKSOFT=y
|
||||
CONFIG_CRC_T10DIF=y
|
||||
CONFIG_CROSS_MEMORY_ATTACH=y
|
||||
CONFIG_CRYPTO_AES_ARM64=y
|
||||
CONFIG_CRYPTO_AES_ARM64_CE=y
|
||||
CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
|
||||
CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
|
||||
CONFIG_CRYPTO_CRC32=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_CRC64_ROCKSOFT=y
|
||||
CONFIG_CRYPTO_CRCT10DIF=y
|
||||
CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=y
|
||||
CONFIG_CRYPTO_CRYPTD=y
|
||||
# CONFIG_CRYPTO_DEV_ROCKCHIP is not set
|
||||
CONFIG_CRYPTO_ECB=y
|
||||
CONFIG_CRYPTO_GHASH_ARM64_CE=y
|
||||
CONFIG_CRYPTO_HW=y
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_GF128MUL=y
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
CONFIG_CRYPTO_LIB_UTILS=y
|
||||
CONFIG_CRYPTO_POLYVAL=y
|
||||
CONFIG_CRYPTO_POLYVAL_ARM64_CE=y
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SM3=y
|
||||
CONFIG_CRYPTO_SM3_NEON=y
|
||||
CONFIG_CRYPTO_SM4=y
|
||||
CONFIG_CRYPTO_SM4_ARM64_CE_BLK=y
|
||||
CONFIG_CRYPTO_SM4_ARM64_NEON_BLK=y
|
||||
CONFIG_DCACHE_WORD_ACCESS=y
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
# CONFIG_DEVFREQ_GOV_PASSIVE is not set
|
||||
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_DEVFREQ_GOV_POWERSAVE=y
|
||||
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
|
||||
CONFIG_DEVFREQ_GOV_USERSPACE=y
|
||||
# CONFIG_DEVFREQ_THERMAL is not set
|
||||
CONFIG_DEVMEM=y
|
||||
# CONFIG_DEVPORT is not set
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y
|
||||
CONFIG_DMA_CMA=y
|
||||
CONFIG_DMA_DIRECT_REMAP=y
|
||||
CONFIG_DMA_ENGINE=y
|
||||
CONFIG_DMA_NEED_SYNC=y
|
||||
CONFIG_DMA_OF=y
|
||||
CONFIG_DMA_OPS_HELPERS=y
|
||||
CONFIG_DMA_SHARED_BUFFER=y
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_DTC=y
|
||||
CONFIG_DT_IDLE_GENPD=y
|
||||
CONFIG_DT_IDLE_STATES=y
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_DWMAC_DWC_QOS_ETH=y
|
||||
CONFIG_DWMAC_GENERIC=y
|
||||
CONFIG_DWMAC_ROCKCHIP=y
|
||||
CONFIG_DW_WATCHDOG=y
|
||||
CONFIG_EDAC_SUPPORT=y
|
||||
CONFIG_EEPROM_AT24=y
|
||||
CONFIG_EMAC_ROCKCHIP=y
|
||||
CONFIG_ENERGY_MODEL=y
|
||||
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXTCON=y
|
||||
CONFIG_F2FS_FS=y
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_FIX_EARLYCON_MEM=y
|
||||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_FS_IOMAP=y
|
||||
CONFIG_FS_MBCACHE=y
|
||||
CONFIG_FUNCTION_ALIGNMENT=4
|
||||
CONFIG_FUNCTION_ALIGNMENT_4B=y
|
||||
CONFIG_FWNODE_MDIO=y
|
||||
CONFIG_FW_LOADER_PAGED_BUF=y
|
||||
CONFIG_FW_LOADER_SYSFS=y
|
||||
CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y
|
||||
CONFIG_GENERIC_ALLOCATOR=y
|
||||
CONFIG_GENERIC_ARCH_TOPOLOGY=y
|
||||
CONFIG_GENERIC_BUG=y
|
||||
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
|
||||
CONFIG_GENERIC_CPU_AUTOPROBE=y
|
||||
CONFIG_GENERIC_CPU_DEVICES=y
|
||||
CONFIG_GENERIC_CPU_VULNERABILITIES=y
|
||||
CONFIG_GENERIC_CSUM=y
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
CONFIG_GENERIC_GETTIMEOFDAY=y
|
||||
CONFIG_GENERIC_IDLE_POLL_SETUP=y
|
||||
CONFIG_GENERIC_IOREMAP=y
|
||||
CONFIG_GENERIC_IRQ_CHIP=y
|
||||
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
|
||||
CONFIG_GENERIC_IRQ_MIGRATION=y
|
||||
CONFIG_GENERIC_IRQ_SHOW=y
|
||||
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
|
||||
CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y
|
||||
CONFIG_GENERIC_MSI_IRQ=y
|
||||
CONFIG_GENERIC_PCI_IOMAP=y
|
||||
CONFIG_GENERIC_PHY=y
|
||||
CONFIG_GENERIC_PINCONF=y
|
||||
CONFIG_GENERIC_SCHED_CLOCK=y
|
||||
CONFIG_GENERIC_SMP_IDLE_THREAD=y
|
||||
CONFIG_GENERIC_STRNCPY_FROM_USER=y
|
||||
CONFIG_GENERIC_STRNLEN_USER=y
|
||||
CONFIG_GENERIC_TIME_VSYSCALL=y
|
||||
CONFIG_GPIOLIB_IRQCHIP=y
|
||||
CONFIG_GPIO_CDEV=y
|
||||
CONFIG_GPIO_DWAPB=y
|
||||
CONFIG_GPIO_GENERIC=y
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||
CONFIG_GPIO_ROCKCHIP=y
|
||||
CONFIG_GPIO_SYSCON=y
|
||||
CONFIG_GRO_CELLS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_HAS_DMA=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_IOPORT_MAP=y
|
||||
CONFIG_HOTPLUG_CORE_SYNC=y
|
||||
CONFIG_HOTPLUG_CORE_SYNC_DEAD=y
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_HOTPLUG_PCI=y
|
||||
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
||||
# CONFIG_HOTPLUG_PCI_PCIE is not set
|
||||
# CONFIG_HOTPLUG_PCI_SHPC is not set
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING=y
|
||||
CONFIG_HWMON=y
|
||||
CONFIG_HWSPINLOCK=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_HW_RANDOM_ROCKCHIP=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_HELPER_AUTO=y
|
||||
CONFIG_I2C_RK3X=y
|
||||
CONFIG_IIO=y
|
||||
# CONFIG_IIO_SCMI is not set
|
||||
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
|
||||
CONFIG_INDIRECT_PIO=y
|
||||
CONFIG_INPUT=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_FF_MEMLESS=y
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
CONFIG_INPUT_LEDS=y
|
||||
CONFIG_INPUT_MATRIXKMAP=y
|
||||
CONFIG_INPUT_RK805_PWRKEY=y
|
||||
# CONFIG_IOMMUFD is not set
|
||||
CONFIG_IOMMU_API=y
|
||||
# CONFIG_IOMMU_DEBUGFS is not set
|
||||
# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set
|
||||
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
|
||||
CONFIG_IOMMU_DEFAULT_PASSTHROUGH=y
|
||||
CONFIG_IOMMU_DMA=y
|
||||
CONFIG_IOMMU_IOVA=y
|
||||
CONFIG_IOMMU_IO_PGTABLE=y
|
||||
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
|
||||
# CONFIG_IOMMU_IO_PGTABLE_DART is not set
|
||||
CONFIG_IOMMU_IO_PGTABLE_LPAE=y
|
||||
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
|
||||
CONFIG_IOMMU_SUPPORT=y
|
||||
# CONFIG_IO_STRICT_DEVMEM is not set
|
||||
CONFIG_IRQCHIP=y
|
||||
CONFIG_IRQ_DOMAIN=y
|
||||
CONFIG_IRQ_DOMAIN_HIERARCHY=y
|
||||
CONFIG_IRQ_FORCED_THREADING=y
|
||||
CONFIG_IRQ_MSI_IOMMU=y
|
||||
CONFIG_IRQ_MSI_LIB=y
|
||||
CONFIG_IRQ_TIME_ACCOUNTING=y
|
||||
CONFIG_IRQ_WORK=y
|
||||
CONFIG_JBD2=y
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JUMP_LABEL=y
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KCMP=y
|
||||
CONFIG_KEXEC_CORE=y
|
||||
CONFIG_KEXEC_FILE=y
|
||||
CONFIG_KSM=y
|
||||
# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_PWM=y
|
||||
CONFIG_LEDS_SYSCON=y
|
||||
CONFIG_LEDS_TRIGGER_CPU=y
|
||||
CONFIG_LEDS_TRIGGER_PANIC=y
|
||||
CONFIG_LIBCRC32C=y
|
||||
CONFIG_LIBFDT=y
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_LOCK_DEBUGGING_SUPPORT=y
|
||||
CONFIG_LOCK_SPIN_ON_OWNER=y
|
||||
CONFIG_LOG_BUF_SHIFT=19
|
||||
CONFIG_LRU_GEN_WALKS_MMU=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_MAGIC_SYSRQ_SERIAL=y
|
||||
CONFIG_MAILBOX=y
|
||||
# CONFIG_MAILBOX_TEST is not set
|
||||
CONFIG_MDIO_BUS=y
|
||||
CONFIG_MDIO_BUS_MUX=y
|
||||
CONFIG_MDIO_BUS_MUX_GPIO=y
|
||||
CONFIG_MDIO_BUS_MUX_MMIOREG=y
|
||||
CONFIG_MDIO_DEVICE=y
|
||||
CONFIG_MDIO_DEVRES=y
|
||||
CONFIG_MEDIATEK_GE_PHY=y
|
||||
# CONFIG_MEDIATEK_GE_SOC_PHY is not set
|
||||
CONFIG_MEMORY_ISOLATION=y
|
||||
CONFIG_MFD_CORE=y
|
||||
# CONFIG_MFD_KHADAS_MCU is not set
|
||||
CONFIG_MFD_RK8XX=y
|
||||
CONFIG_MFD_RK8XX_I2C=y
|
||||
CONFIG_MFD_RK8XX_SPI=y
|
||||
CONFIG_MFD_SYSCON=y
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_BLOCK=y
|
||||
CONFIG_MMC_BLOCK_MINORS=32
|
||||
CONFIG_MMC_CQHCI=y
|
||||
CONFIG_MMC_DW=y
|
||||
# CONFIG_MMC_DW_BLUEFIELD is not set
|
||||
# CONFIG_MMC_DW_EXYNOS is not set
|
||||
# CONFIG_MMC_DW_HI3798CV200 is not set
|
||||
# CONFIG_MMC_DW_HI3798MV200 is not set
|
||||
# CONFIG_MMC_DW_K3 is not set
|
||||
# CONFIG_MMC_DW_PCI is not set
|
||||
CONFIG_MMC_DW_PLTFM=y
|
||||
CONFIG_MMC_DW_ROCKCHIP=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_OF_ARASAN=y
|
||||
CONFIG_MMC_SDHCI_OF_DWCMSHC=y
|
||||
CONFIG_MMC_SDHCI_PLTFM=y
|
||||
CONFIG_MMU_LAZY_TLB_REFCOUNT=y
|
||||
CONFIG_MODULES_USE_ELF_RELA=y
|
||||
CONFIG_MOTORCOMM_PHY=y
|
||||
CONFIG_MQ_IOSCHED_DEADLINE=y
|
||||
# CONFIG_MTD_CFI is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
|
||||
CONFIG_MTD_SPLIT_FIRMWARE=y
|
||||
CONFIG_MTK_NET_PHYLIB=y
|
||||
CONFIG_MUTEX_SPIN_ON_OWNER=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_NEED_SG_DMA_FLAGS=y
|
||||
CONFIG_NEED_SG_DMA_LENGTH=y
|
||||
CONFIG_NET_DEVLINK=y
|
||||
CONFIG_NET_DEVMEM=y
|
||||
CONFIG_NET_DSA=y
|
||||
CONFIG_NET_DSA_MT7530=y
|
||||
CONFIG_NET_DSA_MT7530_MDIO=y
|
||||
CONFIG_NET_DSA_MT7530_MMIO=y
|
||||
CONFIG_NET_DSA_TAG_MTK=y
|
||||
CONFIG_NET_EGRESS=y
|
||||
CONFIG_NET_FLOW_LIMIT=y
|
||||
CONFIG_NET_INGRESS=y
|
||||
CONFIG_NET_PTP_CLASSIFY=y
|
||||
CONFIG_NET_SELFTESTS=y
|
||||
CONFIG_NET_XGRESS=y
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NOP_USB_XCEIV=y
|
||||
CONFIG_NO_HZ_COMMON=y
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NR_CPUS=256
|
||||
CONFIG_NVMEM=y
|
||||
CONFIG_NVMEM_LAYOUTS=y
|
||||
CONFIG_NVMEM_ROCKCHIP_EFUSE=y
|
||||
CONFIG_NVMEM_ROCKCHIP_OTP=y
|
||||
CONFIG_NVMEM_SYSFS=y
|
||||
CONFIG_NVME_CORE=y
|
||||
# CONFIG_NVME_HWMON is not set
|
||||
# CONFIG_NVME_MULTIPATH is not set
|
||||
CONFIG_OF=y
|
||||
CONFIG_OF_ADDRESS=y
|
||||
CONFIG_OF_DYNAMIC=y
|
||||
CONFIG_OF_EARLY_FLATTREE=y
|
||||
CONFIG_OF_FLATTREE=y
|
||||
CONFIG_OF_GPIO=y
|
||||
CONFIG_OF_IOMMU=y
|
||||
CONFIG_OF_IRQ=y
|
||||
CONFIG_OF_KOBJ=y
|
||||
CONFIG_OF_MDIO=y
|
||||
CONFIG_OF_OVERLAY=y
|
||||
CONFIG_OF_RESOLVE=y
|
||||
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
|
||||
CONFIG_PADATA=y
|
||||
CONFIG_PAGE_POOL=y
|
||||
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
|
||||
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
|
||||
# CONFIG_PANIC_ON_OOPS is not set
|
||||
CONFIG_PANIC_ON_OOPS_VALUE=0
|
||||
CONFIG_PANIC_TIMEOUT=0
|
||||
# CONFIG_PARTITION_ADVANCED is not set
|
||||
CONFIG_PARTITION_PERCPU=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIEAER=y
|
||||
CONFIG_PCIEASPM=y
|
||||
CONFIG_PCIEASPM_DEFAULT=y
|
||||
# CONFIG_PCIEASPM_PERFORMANCE is not set
|
||||
# CONFIG_PCIEASPM_POWERSAVE is not set
|
||||
# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
CONFIG_PCIE_DW=y
|
||||
CONFIG_PCIE_DW_HOST=y
|
||||
CONFIG_PCIE_PME=y
|
||||
CONFIG_PCIE_ROCKCHIP=y
|
||||
CONFIG_PCIE_ROCKCHIP_DW=y
|
||||
CONFIG_PCIE_ROCKCHIP_DW_HOST=y
|
||||
CONFIG_PCIE_ROCKCHIP_HOST=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_PCI_DOMAINS_GENERIC=y
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_PCI_STUB=y
|
||||
CONFIG_PCS_MTK_LYNXI=y
|
||||
CONFIG_PCS_XPCS=y
|
||||
CONFIG_PER_VMA_LOCK=y
|
||||
CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
|
||||
CONFIG_PGTABLE_LEVELS=4
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHYLIB_LEDS=y
|
||||
CONFIG_PHYLINK=y
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_PHY_ROCKCHIP_DP=y
|
||||
# CONFIG_PHY_ROCKCHIP_DPHY_RX0 is not set
|
||||
CONFIG_PHY_ROCKCHIP_EMMC=y
|
||||
# CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY is not set
|
||||
# CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY is not set
|
||||
# CONFIG_PHY_ROCKCHIP_INNO_HDMI is not set
|
||||
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
|
||||
CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=y
|
||||
CONFIG_PHY_ROCKCHIP_PCIE=y
|
||||
# CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX is not set
|
||||
CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=y
|
||||
CONFIG_PHY_ROCKCHIP_TYPEC=y
|
||||
CONFIG_PHY_ROCKCHIP_USB=y
|
||||
CONFIG_PHY_ROCKCHIP_USBDP=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_RK805=y
|
||||
CONFIG_PINCTRL_ROCKCHIP=y
|
||||
# CONFIG_PINCTRL_SCMI is not set
|
||||
# CONFIG_PINCTRL_SINGLE is not set
|
||||
CONFIG_PL330_DMA=y
|
||||
CONFIG_PLATFORM_MHU=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_CLK=y
|
||||
CONFIG_PM_DEVFREQ=y
|
||||
# CONFIG_PM_DEVFREQ_EVENT is not set
|
||||
CONFIG_PM_GENERIC_DOMAINS=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_OF=y
|
||||
CONFIG_PM_OPP=y
|
||||
CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_POWER_SUPPLY_HWMON=y
|
||||
CONFIG_PPS=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_PROC_PAGE_MONITOR=y
|
||||
CONFIG_PROC_VMCORE=y
|
||||
CONFIG_PTP_1588_CLOCK=y
|
||||
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
|
||||
CONFIG_PWM=y
|
||||
CONFIG_PWM_ROCKCHIP=y
|
||||
# CONFIG_QFMT_V2 is not set
|
||||
CONFIG_QUEUED_RWLOCKS=y
|
||||
CONFIG_QUEUED_SPINLOCKS=y
|
||||
CONFIG_QUOTA=y
|
||||
CONFIG_QUOTACTL=y
|
||||
CONFIG_RAID_ATTRS=y
|
||||
CONFIG_RANDSTRUCT_NONE=y
|
||||
CONFIG_RAS=y
|
||||
CONFIG_RATIONAL=y
|
||||
# CONFIG_RAVE_SP_CORE is not set
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_REALTEK_PHY=y
|
||||
CONFIG_REALTEK_PHY_HWMON=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_REGMAP_I2C=y
|
||||
CONFIG_REGMAP_IRQ=y
|
||||
CONFIG_REGMAP_MMIO=y
|
||||
CONFIG_REGMAP_SPI=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_ARM_SCMI=y
|
||||
CONFIG_REGULATOR_FAN53555=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_REGULATOR_GPIO=y
|
||||
CONFIG_REGULATOR_PWM=y
|
||||
CONFIG_REGULATOR_RK808=y
|
||||
CONFIG_RELOCATABLE=y
|
||||
CONFIG_RESET_CONTROLLER=y
|
||||
CONFIG_RESET_SCMI=y
|
||||
CONFIG_RFS_ACCEL=y
|
||||
CONFIG_ROCKCHIP_ERRATUM_3568002=y
|
||||
CONFIG_ROCKCHIP_ERRATUM_3588001=y
|
||||
CONFIG_ROCKCHIP_GRF=y
|
||||
CONFIG_ROCKCHIP_IODOMAIN=y
|
||||
CONFIG_ROCKCHIP_IOMMU=y
|
||||
CONFIG_ROCKCHIP_MBOX=y
|
||||
CONFIG_ROCKCHIP_PHY=y
|
||||
CONFIG_ROCKCHIP_PM_DOMAINS=y
|
||||
# CONFIG_ROCKCHIP_SARADC is not set
|
||||
CONFIG_ROCKCHIP_THERMAL=y
|
||||
CONFIG_ROCKCHIP_TIMER=y
|
||||
CONFIG_RODATA_FULL_DEFAULT_ENABLED=y
|
||||
CONFIG_RPS=y
|
||||
CONFIG_RSEQ=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_HYM8563=y
|
||||
CONFIG_RTC_DRV_RK808=y
|
||||
CONFIG_RTC_I2C_AND_SPI=y
|
||||
CONFIG_RTC_NVMEM=y
|
||||
# CONFIG_RUNTIME_TESTING_MENU is not set
|
||||
CONFIG_RWSEM_SPIN_ON_OWNER=y
|
||||
CONFIG_SCHED_MC=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_COMMON=y
|
||||
# CONFIG_SCSI_LOWLEVEL is not set
|
||||
# CONFIG_SCSI_PROC_FS is not set
|
||||
CONFIG_SCSI_SAS_ATTRS=y
|
||||
CONFIG_SCSI_SAS_HOST_SMP=y
|
||||
CONFIG_SCSI_SAS_LIBSAS=y
|
||||
CONFIG_SCSI_UFSHCD=y
|
||||
CONFIG_SCSI_UFSHCD_PLATFORM=y
|
||||
CONFIG_SCSI_UFS_HWMON=y
|
||||
CONFIG_SCSI_UFS_ROCKCHIP=y
|
||||
# CONFIG_SECURITY_DMESG_RESTRICT is not set
|
||||
CONFIG_SENSORS_ARM_SCMI=y
|
||||
CONFIG_SENSORS_ARM_SCPI=y
|
||||
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
|
||||
CONFIG_SERIAL_8250_DW=y
|
||||
CONFIG_SERIAL_8250_DWLIB=y
|
||||
CONFIG_SERIAL_8250_EXAR=y
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_FSL=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=12
|
||||
CONFIG_SERIAL_8250_PCI=y
|
||||
CONFIG_SERIAL_8250_PCILIB=y
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=12
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_SERIAL_DEV_BUS=y
|
||||
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
|
||||
CONFIG_SERIAL_MCTRL_GPIO=y
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_AMBAKMI=y
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
CONFIG_SG_POOL=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_SOCK_RX_QUEUE_MAPPING=y
|
||||
CONFIG_SOFTIRQ_ON_OWN_STACK=y
|
||||
CONFIG_SPARSEMEM=y
|
||||
CONFIG_SPARSEMEM_EXTREME=y
|
||||
CONFIG_SPARSEMEM_VMEMMAP=y
|
||||
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_BITBANG=y
|
||||
CONFIG_SPI_DYNAMIC=y
|
||||
CONFIG_SPI_MASTER=y
|
||||
CONFIG_SPI_MEM=y
|
||||
CONFIG_SPI_ROCKCHIP=y
|
||||
CONFIG_SPI_ROCKCHIP_SFC=y
|
||||
CONFIG_SPI_SPIDEV=y
|
||||
CONFIG_SPLIT_PMD_PTLOCKS=y
|
||||
CONFIG_SPLIT_PTE_PTLOCKS=y
|
||||
# CONFIG_SQUASHFS_EMBEDDED is not set
|
||||
CONFIG_SQUASHFS_FILE_CACHE=y
|
||||
# CONFIG_SQUASHFS_FILE_DIRECT is not set
|
||||
CONFIG_SRAM=y
|
||||
CONFIG_STACKPROTECTOR=y
|
||||
CONFIG_STACKPROTECTOR_PER_TASK=y
|
||||
CONFIG_STACKPROTECTOR_STRONG=y
|
||||
CONFIG_STACKTRACE=y
|
||||
CONFIG_STMMAC_ETH=y
|
||||
CONFIG_STMMAC_PLATFORM=y
|
||||
CONFIG_STRICT_DEVMEM=y
|
||||
# CONFIG_STRIP_ASM_SYMS is not set
|
||||
# CONFIG_SWAP is not set
|
||||
CONFIG_SWIOTLB=y
|
||||
CONFIG_SWPHY=y
|
||||
CONFIG_SYNC_FILE=y
|
||||
CONFIG_SYSCTL_EXCEPTION_TRACE=y
|
||||
CONFIG_SYSFS_SYSCALL=y
|
||||
# CONFIG_TEXTSEARCH is not set
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
|
||||
CONFIG_THERMAL_EMULATION=y
|
||||
CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
|
||||
CONFIG_THERMAL_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_HWMON=y
|
||||
CONFIG_THERMAL_OF=y
|
||||
CONFIG_THREAD_INFO_IN_TASK=y
|
||||
CONFIG_TICK_CPU_ACCOUNTING=y
|
||||
CONFIG_TIMER_OF=y
|
||||
CONFIG_TIMER_PROBE=y
|
||||
CONFIG_TOOLS_SUPPORT_RELR=y
|
||||
CONFIG_TRACE_CLOCK=y
|
||||
CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
|
||||
CONFIG_TRANS_TABLE=y
|
||||
CONFIG_TREE_RCU=y
|
||||
CONFIG_TREE_SRCU=y
|
||||
CONFIG_TYPEC=y
|
||||
# CONFIG_TYPEC_ANX7411 is not set
|
||||
CONFIG_TYPEC_FUSB302=y
|
||||
# CONFIG_TYPEC_HD3SS3220 is not set
|
||||
# CONFIG_TYPEC_MUX_FSA4480 is not set
|
||||
# CONFIG_TYPEC_MUX_GPIO_SBU is not set
|
||||
# CONFIG_TYPEC_MUX_IT5205 is not set
|
||||
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
|
||||
# CONFIG_TYPEC_MUX_PI3USB30532 is not set
|
||||
# CONFIG_TYPEC_MUX_PTN36502 is not set
|
||||
# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
|
||||
# CONFIG_TYPEC_RT1719 is not set
|
||||
# CONFIG_TYPEC_STUSB160X is not set
|
||||
# CONFIG_TYPEC_TCPCI is not set
|
||||
CONFIG_TYPEC_TCPM=y
|
||||
# CONFIG_TYPEC_TPS6598X is not set
|
||||
# CONFIG_TYPEC_WUSB3801 is not set
|
||||
# CONFIG_UCLAMP_TASK is not set
|
||||
# CONFIG_UEVENT_HELPER is not set
|
||||
CONFIG_UNMAP_KERNEL_AT_EL0=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_COMMON=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_HOST=y
|
||||
CONFIG_USB_DWC3_OF_SIMPLE=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD_PLATFORM=y
|
||||
CONFIG_USB_PHY=y
|
||||
CONFIG_USB_ROLE_SWITCH=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_SUPPORT=y
|
||||
CONFIG_USB_ULPI=y
|
||||
CONFIG_USB_ULPI_BUS=y
|
||||
CONFIG_USB_ULPI_VIEWPORT=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_PLATFORM=y
|
||||
CONFIG_USER_STACKTRACE_SUPPORT=y
|
||||
CONFIG_VDSO_GETRANDOM=y
|
||||
# CONFIG_VIRTIO_MENU is not set
|
||||
CONFIG_VMAP_STACK=y
|
||||
CONFIG_VMCORE_INFO=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_VT=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_VT_HW_CONSOLE_BINDING=y
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
CONFIG_XARRAY_MULTI=y
|
||||
CONFIG_XPS=y
|
||||
CONFIG_XXHASH=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_BCJ=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZONE_DMA32=y
|
||||
+444
@@ -0,0 +1,444 @@
|
||||
From 4294e32111781b3de4d73b944cbd1bc1662a9a7a Mon Sep 17 00:00:00 2001
|
||||
From: Sam Edwards <cfsworks@gmail.com>
|
||||
Date: Wed, 11 Sep 2024 19:50:30 -0700
|
||||
Subject: arm64: dts: rockchip: Split up RK3588's PCIe pinctrls
|
||||
|
||||
These pinctrls manage the low-speed PCIe signals:
|
||||
- CLKREQ#: An output on the RK3588 (both RC or EP modes), used to
|
||||
request that external clock-generation circuitry provide a clock.
|
||||
- PERST#: An input on the RK3588 in EP mode, used to detect a reset
|
||||
signal from the RC. In RC mode, the hardware does not use this signal:
|
||||
Linux itself generates it by putting the pin in GPIO mode.
|
||||
- WAKE#: In EP mode, this is an output; in RC mode, this is an input.
|
||||
|
||||
Each of these signals serves a distinct purpose, and more importantly,
|
||||
PERST# should not be muxed when the RK3588 is in the RC role. Bundling
|
||||
them together in pinctrl groups prevents proper use: indeed, almost none
|
||||
of the current board-specific .dts files make any use of them.
|
||||
(Exception: Rock 5A recently had a patch land that misuses _pins; this
|
||||
patch corrects that.)
|
||||
|
||||
However, on some RK3588 boards, the PCIe 3 controller will indefinitely
|
||||
stall the boot if CLKREQ# is not muxed (details in the next patch).
|
||||
This patch unbundles the signals to allow them to be used.
|
||||
|
||||
Signed-off-by: Sam Edwards <CFSworks@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20240912025034.180233-2-CFSworks@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-base-pinctrl.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-base-pinctrl.dtsi
|
||||
@@ -1612,23 +1612,43 @@
|
||||
|
||||
pcie20x1 {
|
||||
/omit-if-no-ref/
|
||||
- pcie20x1m0_pins: pcie20x1m0-pins {
|
||||
+ pcie20x1m0_clkreqn: pcie20x1m0-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie20x1_2_clkreqn_m0 */
|
||||
- <3 RK_PC7 4 &pcfg_pull_none>,
|
||||
+ <3 RK_PC7 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie20x1m0_perstn: pcie20x1m0-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie20x1_2_perstn_m0 */
|
||||
- <3 RK_PD1 4 &pcfg_pull_none>,
|
||||
+ <3 RK_PD1 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie20x1m0_waken: pcie20x1m0-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie20x1_2_waken_m0 */
|
||||
<3 RK_PD0 4 &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
- pcie20x1m1_pins: pcie20x1m1-pins {
|
||||
+ pcie20x1m1_clkreqn: pcie20x1m1-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie20x1_2_clkreqn_m1 */
|
||||
- <4 RK_PB7 4 &pcfg_pull_none>,
|
||||
+ <4 RK_PB7 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie20x1m1_perstn: pcie20x1m1-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie20x1_2_perstn_m1 */
|
||||
- <4 RK_PC1 4 &pcfg_pull_none>,
|
||||
+ <4 RK_PC1 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie20x1m1_waken: pcie20x1m1-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie20x1_2_waken_m1 */
|
||||
<4 RK_PC0 4 &pcfg_pull_none>;
|
||||
};
|
||||
@@ -1654,52 +1674,127 @@
|
||||
|
||||
pcie30x1 {
|
||||
/omit-if-no-ref/
|
||||
- pcie30x1m0_pins: pcie30x1m0-pins {
|
||||
+ pcie30x1m0_0_clkreqn: pcie30x1m0-0-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie30x1_0_clkreqn_m0 */
|
||||
- <0 RK_PC0 12 &pcfg_pull_none>,
|
||||
+ <0 RK_PC0 12 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m0_0_perstn: pcie30x1m0-0-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_0_perstn_m0 */
|
||||
- <0 RK_PC5 12 &pcfg_pull_none>,
|
||||
+ <0 RK_PC5 12 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m0_0_waken: pcie30x1m0-0-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_0_waken_m0 */
|
||||
- <0 RK_PC4 12 &pcfg_pull_none>,
|
||||
+ <0 RK_PC4 12 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m0_1_clkreqn: pcie30x1m0-1-clkreqn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_1_clkreqn_m0 */
|
||||
- <0 RK_PB5 12 &pcfg_pull_none>,
|
||||
+ <0 RK_PB5 12 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m0_1_perstn: pcie30x1m0-1-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_1_perstn_m0 */
|
||||
- <0 RK_PB7 12 &pcfg_pull_none>,
|
||||
+ <0 RK_PB7 12 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m0_1_waken: pcie30x1m0-1-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_1_waken_m0 */
|
||||
<0 RK_PB6 12 &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
- pcie30x1m1_pins: pcie30x1m1-pins {
|
||||
+ pcie30x1m1_0_clkreqn: pcie30x1m1-0-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie30x1_0_clkreqn_m1 */
|
||||
- <4 RK_PA3 4 &pcfg_pull_none>,
|
||||
+ <4 RK_PA3 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m1_0_perstn: pcie30x1m1-0-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_0_perstn_m1 */
|
||||
- <4 RK_PA5 4 &pcfg_pull_none>,
|
||||
+ <4 RK_PA5 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m1_0_waken: pcie30x1m1-0-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_0_waken_m1 */
|
||||
- <4 RK_PA4 4 &pcfg_pull_none>,
|
||||
+ <4 RK_PA4 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m1_1_clkreqn: pcie30x1m1-1-clkreqn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_1_clkreqn_m1 */
|
||||
- <4 RK_PA0 4 &pcfg_pull_none>,
|
||||
+ <4 RK_PA0 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m1_1_perstn: pcie30x1m1-1-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_1_perstn_m1 */
|
||||
- <4 RK_PA2 4 &pcfg_pull_none>,
|
||||
+ <4 RK_PA2 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m1_1_waken: pcie30x1m1-1-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_1_waken_m1 */
|
||||
<4 RK_PA1 4 &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
- pcie30x1m2_pins: pcie30x1m2-pins {
|
||||
+ pcie30x1m2_0_clkreqn: pcie30x1m2-0-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie30x1_0_clkreqn_m2 */
|
||||
- <1 RK_PB5 4 &pcfg_pull_none>,
|
||||
+ <1 RK_PB5 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m2_0_perstn: pcie30x1m2-0-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_0_perstn_m2 */
|
||||
- <1 RK_PB4 4 &pcfg_pull_none>,
|
||||
+ <1 RK_PB4 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m2_0_waken: pcie30x1m2-0-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_0_waken_m2 */
|
||||
- <1 RK_PB3 4 &pcfg_pull_none>,
|
||||
+ <1 RK_PB3 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m2_1_clkreqn: pcie30x1m2-1-clkreqn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_1_clkreqn_m2 */
|
||||
- <1 RK_PA0 4 &pcfg_pull_none>,
|
||||
+ <1 RK_PA0 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m2_1_perstn: pcie30x1m2-1-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_1_perstn_m2 */
|
||||
- <1 RK_PA7 4 &pcfg_pull_none>,
|
||||
+ <1 RK_PA7 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x1m2_1_waken: pcie30x1m2-1-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x1_1_waken_m2 */
|
||||
<1 RK_PA1 4 &pcfg_pull_none>;
|
||||
};
|
||||
@@ -1721,45 +1816,85 @@
|
||||
|
||||
pcie30x2 {
|
||||
/omit-if-no-ref/
|
||||
- pcie30x2m0_pins: pcie30x2m0-pins {
|
||||
+ pcie30x2m0_clkreqn: pcie30x2m0-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie30x2_clkreqn_m0 */
|
||||
- <0 RK_PD1 12 &pcfg_pull_none>,
|
||||
+ <0 RK_PD1 12 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x2m0_perstn: pcie30x2m0-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x2_perstn_m0 */
|
||||
- <0 RK_PD4 12 &pcfg_pull_none>,
|
||||
+ <0 RK_PD4 12 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x2m0_waken: pcie30x2m0-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x2_waken_m0 */
|
||||
<0 RK_PD2 12 &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
- pcie30x2m1_pins: pcie30x2m1-pins {
|
||||
+ pcie30x2m1_clkreqn: pcie30x2m1-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie30x2_clkreqn_m1 */
|
||||
- <4 RK_PA6 4 &pcfg_pull_none>,
|
||||
+ <4 RK_PA6 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x2m1_perstn: pcie30x2m1-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x2_perstn_m1 */
|
||||
- <4 RK_PB0 4 &pcfg_pull_none>,
|
||||
+ <4 RK_PB0 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x2m1_waken: pcie30x2m1-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x2_waken_m1 */
|
||||
<4 RK_PA7 4 &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
- pcie30x2m2_pins: pcie30x2m2-pins {
|
||||
+ pcie30x2m2_clkreqn: pcie30x2m2-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie30x2_clkreqn_m2 */
|
||||
- <3 RK_PD2 4 &pcfg_pull_none>,
|
||||
+ <3 RK_PD2 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x2m2_perstn: pcie30x2m2-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x2_perstn_m2 */
|
||||
- <3 RK_PD4 4 &pcfg_pull_none>,
|
||||
+ <3 RK_PD4 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x2m2_waken: pcie30x2m2-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x2_waken_m2 */
|
||||
<3 RK_PD3 4 &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
- pcie30x2m3_pins: pcie30x2m3-pins {
|
||||
+ pcie30x2m3_clkreqn: pcie30x2m3-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie30x2_clkreqn_m3 */
|
||||
- <1 RK_PD7 4 &pcfg_pull_none>,
|
||||
+ <1 RK_PD7 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x2m3_perstn: pcie30x2m3-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x2_perstn_m3 */
|
||||
- <1 RK_PB7 4 &pcfg_pull_none>,
|
||||
+ <1 RK_PB7 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x2m3_waken: pcie30x2m3-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x2_waken_m3 */
|
||||
<1 RK_PB6 4 &pcfg_pull_none>;
|
||||
};
|
||||
@@ -1774,45 +1909,85 @@
|
||||
|
||||
pcie30x4 {
|
||||
/omit-if-no-ref/
|
||||
- pcie30x4m0_pins: pcie30x4m0-pins {
|
||||
+ pcie30x4m0_clkreqn: pcie30x4m0-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie30x4_clkreqn_m0 */
|
||||
- <0 RK_PC6 12 &pcfg_pull_none>,
|
||||
+ <0 RK_PC6 12 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x4m0_perstn: pcie30x4m0-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x4_perstn_m0 */
|
||||
- <0 RK_PD0 12 &pcfg_pull_none>,
|
||||
+ <0 RK_PD0 12 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x4m0_waken: pcie30x4m0-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x4_waken_m0 */
|
||||
<0 RK_PC7 12 &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
- pcie30x4m1_pins: pcie30x4m1-pins {
|
||||
+ pcie30x4m1_clkreqn: pcie30x4m1-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie30x4_clkreqn_m1 */
|
||||
- <4 RK_PB4 4 &pcfg_pull_none>,
|
||||
+ <4 RK_PB4 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x4m1_perstn: pcie30x4m1-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x4_perstn_m1 */
|
||||
- <4 RK_PB6 4 &pcfg_pull_none>,
|
||||
+ <4 RK_PB6 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x4m1_waken: pcie30x4m1-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x4_waken_m1 */
|
||||
<4 RK_PB5 4 &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
- pcie30x4m2_pins: pcie30x4m2-pins {
|
||||
+ pcie30x4m2_clkreqn: pcie30x4m2-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie30x4_clkreqn_m2 */
|
||||
- <3 RK_PC4 4 &pcfg_pull_none>,
|
||||
+ <3 RK_PC4 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x4m2_perstn: pcie30x4m2-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x4_perstn_m2 */
|
||||
- <3 RK_PC6 4 &pcfg_pull_none>,
|
||||
+ <3 RK_PC6 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x4m2_waken: pcie30x4m2-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x4_waken_m2 */
|
||||
<3 RK_PC5 4 &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
- pcie30x4m3_pins: pcie30x4m3-pins {
|
||||
+ pcie30x4m3_clkreqn: pcie30x4m3-clkreqn {
|
||||
rockchip,pins =
|
||||
/* pcie30x4_clkreqn_m3 */
|
||||
- <1 RK_PB0 4 &pcfg_pull_none>,
|
||||
+ <1 RK_PB0 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x4m3_perstn: pcie30x4m3-perstn {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x4_perstn_m3 */
|
||||
- <1 RK_PB2 4 &pcfg_pull_none>,
|
||||
+ <1 RK_PB2 4 &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
+ pcie30x4m3_waken: pcie30x4m3-waken {
|
||||
+ rockchip,pins =
|
||||
/* pcie30x4_waken_m3 */
|
||||
<1 RK_PB1 4 &pcfg_pull_none>;
|
||||
};
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
@@ -311,7 +311,7 @@
|
||||
};
|
||||
|
||||
&pcie2x1l2 {
|
||||
- pinctrl-0 = <&pcie20x1m0_pins>;
|
||||
+ pinctrl-0 = <&pcie2_reset>, <&pcie20x1m0_clkreqn>, <&pcie20x1m0_waken>;
|
||||
pinctrl-names = "default";
|
||||
reset-gpios = <&gpio3 RK_PD1 GPIO_ACTIVE_HIGH>;
|
||||
vpcie3v3-supply = <&vcc3v3_wf>;
|
||||
@@ -329,6 +329,10 @@
|
||||
pow_en: pow-en {
|
||||
rockchip,pins = <0 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
+
|
||||
+ pcie2_reset: pcie2-reset {
|
||||
+ rockchip,pins = <3 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
};
|
||||
|
||||
power {
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
From d7bb71e69f58c1b3665a9f926bf8d3855111bf8e Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sat, 19 Oct 2024 13:12:10 +0300
|
||||
Subject: arm64: dts: rockchip: Add HDMI0 node to rk3588
|
||||
|
||||
Add support for the HDMI0 output port found on RK3588 SoC.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20241019-rk3588-hdmi0-dt-v2-1-466cd80e8ff9@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
@@ -1369,6 +1369,47 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
+ hdmi0: hdmi@fde80000 {
|
||||
+ compatible = "rockchip,rk3588-dw-hdmi-qp";
|
||||
+ reg = <0x0 0xfde80000 0x0 0x20000>;
|
||||
+ clocks = <&cru PCLK_HDMITX0>,
|
||||
+ <&cru CLK_HDMITX0_EARC>,
|
||||
+ <&cru CLK_HDMITX0_REF>,
|
||||
+ <&cru MCLK_I2S5_8CH_TX>,
|
||||
+ <&cru CLK_HDMIHDP0>,
|
||||
+ <&cru HCLK_VO1>;
|
||||
+ clock-names = "pclk", "earc", "ref", "aud", "hdp", "hclk_vo1";
|
||||
+ interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
+ <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
+ <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
+ <GIC_SPI 172 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
+ <GIC_SPI 360 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
+ interrupt-names = "avp", "cec", "earc", "main", "hpd";
|
||||
+ phys = <&hdptxphy_hdmi0>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&hdmim0_tx0_cec &hdmim0_tx0_hpd
|
||||
+ &hdmim0_tx0_scl &hdmim0_tx0_sda>;
|
||||
+ power-domains = <&power RK3588_PD_VO1>;
|
||||
+ resets = <&cru SRST_HDMITX0_REF>, <&cru SRST_HDMIHDP0>;
|
||||
+ reset-names = "ref", "hdp";
|
||||
+ rockchip,grf = <&sys_grf>;
|
||||
+ rockchip,vo-grf = <&vo1_grf>;
|
||||
+ status = "disabled";
|
||||
+
|
||||
+ ports {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ hdmi0_in: port@0 {
|
||||
+ reg = <0>;
|
||||
+ };
|
||||
+
|
||||
+ hdmi0_out: port@1 {
|
||||
+ reg = <1>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
qos_gpu_m0: qos@fdf35000 {
|
||||
compatible = "rockchip,rk3588-qos", "syscon";
|
||||
reg = <0x0 0xfdf35000 0x0 0x20>;
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
From 33b561eb66f1e271f2899e103c857d20425076f4 Mon Sep 17 00:00:00 2001
|
||||
From: Dragan Simic <dsimic@manjaro.org>
|
||||
Date: Wed, 8 Jan 2025 05:26:45 +0100
|
||||
Subject: arm64: dts: rockchip: Use "dma-noncoherent" in base RK3588 SoC dtsi
|
||||
|
||||
The preferred way to denote hardware with non-coherent DMA is to use the
|
||||
"dma-noncoherent" DT property, at both the GIC redistributor and the GIC ITS
|
||||
levels, [1] instead of relying on the compatibles to handle hardware errata,
|
||||
in this case the Rockchip 3588001 errata. [2]
|
||||
|
||||
Let's have the preferred way employed in the base Rockchip RK3588 SoC dtsi,
|
||||
which also goes along with adding initial support for the Rockchip RK3582 SoC
|
||||
variant, with its separate compatible. [2][3]
|
||||
|
||||
[1] Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.yaml
|
||||
[2] https://lore.kernel.org/linux-rockchip/86msgoozqa.wl-maz@kernel.org/
|
||||
[3] https://lore.kernel.org/linux-rockchip/20241222030355.2246-4-naoki@radxa.com/
|
||||
|
||||
Cc: Marc Zyngier <maz@kernel.org>
|
||||
Cc: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Acked-by: Marc Zyngier <maz@kernel.org>
|
||||
Signed-off-by: Dragan Simic <dsimic@manjaro.org>
|
||||
Link: https://lore.kernel.org/r/fa1a672dae3644bb3caa58f03216d0ca349db88b.1736279094.git.dsimic@manjaro.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
@@ -2020,6 +2020,7 @@
|
||||
<0x0 0xfe680000 0 0x100000>; /* GICR */
|
||||
interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
interrupt-controller;
|
||||
+ dma-noncoherent;
|
||||
mbi-alias = <0x0 0xfe610000>;
|
||||
mbi-ranges = <424 56>;
|
||||
msi-controller;
|
||||
@@ -2031,6 +2032,7 @@
|
||||
its0: msi-controller@fe640000 {
|
||||
compatible = "arm,gic-v3-its";
|
||||
reg = <0x0 0xfe640000 0x0 0x20000>;
|
||||
+ dma-noncoherent;
|
||||
msi-controller;
|
||||
#msi-cells = <1>;
|
||||
};
|
||||
@@ -2038,6 +2040,7 @@
|
||||
its1: msi-controller@fe660000 {
|
||||
compatible = "arm,gic-v3-its";
|
||||
reg = <0x0 0xfe660000 0x0 0x20000>;
|
||||
+ dma-noncoherent;
|
||||
msi-controller;
|
||||
#msi-cells = <1>;
|
||||
};
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
From d0f17738778c12be629ba77ff00c43c3e9eb8428 Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Tue, 4 Feb 2025 14:40:07 +0200
|
||||
Subject: arm64: dts: rockchip: Enable HDMI0 PHY clk provider on RK3588
|
||||
|
||||
Since commit c4b09c562086 ("phy: phy-rockchip-samsung-hdptx: Add clock
|
||||
provider support"), the HDMI PHY PLL can be used as an alternative and
|
||||
more accurate pixel clock source for VOP2 to improve display modes
|
||||
handling on RK3588 SoC.
|
||||
|
||||
Add the missing #clock-cells property to allow using the clock provider
|
||||
functionality of HDMI0 PHY.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Link: https://lore.kernel.org/r/20250204-vop2-hdmi0-disp-modes-v3-4-d71c6a196e58@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
@@ -2813,6 +2813,7 @@
|
||||
reg = <0x0 0xfed60000 0x0 0x2000>;
|
||||
clocks = <&cru CLK_USB2PHY_HDPTXRXPHY_REF>, <&cru PCLK_HDPTX0>;
|
||||
clock-names = "ref", "apb";
|
||||
+ #clock-cells = <0>;
|
||||
#phy-cells = <0>;
|
||||
resets = <&cru SRST_HDPTX0>, <&cru SRST_P_HDPTX0>,
|
||||
<&cru SRST_HDPTX0_INIT>, <&cru SRST_HDPTX0_CMN>,
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
From eb4262203d7d85eb7b6f2696816db272e41f5464 Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Tue, 4 Feb 2025 14:40:08 +0200
|
||||
Subject: arm64: dts: rockchip: Add HDMI0 PHY PLL clock source to VOP2 on
|
||||
RK3588
|
||||
|
||||
VOP2 on RK3588 is able to use the HDMI PHY PLL as an alternative and
|
||||
more accurate pixel clock source to improve handling of display modes up
|
||||
to 4K@60Hz on video ports 0, 1 and 2.
|
||||
|
||||
For now only HDMI0 output is supported, hence add the related PLL clock.
|
||||
|
||||
Tested-by: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250204-vop2-hdmi0-disp-modes-v3-5-d71c6a196e58@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
@@ -1261,14 +1261,16 @@
|
||||
<&cru DCLK_VOP1>,
|
||||
<&cru DCLK_VOP2>,
|
||||
<&cru DCLK_VOP3>,
|
||||
- <&cru PCLK_VOP_ROOT>;
|
||||
+ <&cru PCLK_VOP_ROOT>,
|
||||
+ <&hdptxphy_hdmi0>;
|
||||
clock-names = "aclk",
|
||||
"hclk",
|
||||
"dclk_vp0",
|
||||
"dclk_vp1",
|
||||
"dclk_vp2",
|
||||
"dclk_vp3",
|
||||
- "pclk_vop";
|
||||
+ "pclk_vop",
|
||||
+ "pll_hdmiphy0";
|
||||
iommus = <&vop_mmu>;
|
||||
power-domains = <&power RK3588_PD_VOP>;
|
||||
rockchip,grf = <&sys_grf>;
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
From 2efdb041019fd6c58abefba3eb6fdc4d659e576c Mon Sep 17 00:00:00 2001
|
||||
From: Damon Ding <damon.ding@rock-chips.com>
|
||||
Date: Thu, 6 Feb 2025 11:03:30 +0800
|
||||
Subject: arm64: dts: rockchip: Fix label name of hdptxphy for RK3588
|
||||
|
||||
The hdptxphy is a combo transmit-PHY for HDMI2.1 TMDS Link, FRL Link, DP
|
||||
and eDP Link. Therefore, it is better to name it hdptxphy0 other than
|
||||
hdptxphy_hdmi0, which will be referenced by both hdmi0 and edp0 nodes.
|
||||
|
||||
Signed-off-by: Damon Ding <damon.ding@rock-chips.com>
|
||||
Link: https://lore.kernel.org/r/20250206030330.680424-3-damon.ding@rock-chips.com
|
||||
[added armsom-sige7, where hdmi-support was added recently and also
|
||||
the hdptxphy0-as-dclk source I just added]
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
@@ -1262,7 +1262,7 @@
|
||||
<&cru DCLK_VOP2>,
|
||||
<&cru DCLK_VOP3>,
|
||||
<&cru PCLK_VOP_ROOT>,
|
||||
- <&hdptxphy_hdmi0>;
|
||||
+ <&hdptxphy0>;
|
||||
clock-names = "aclk",
|
||||
"hclk",
|
||||
"dclk_vp0",
|
||||
@@ -1387,7 +1387,7 @@
|
||||
<GIC_SPI 172 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
<GIC_SPI 360 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
interrupt-names = "avp", "cec", "earc", "main", "hpd";
|
||||
- phys = <&hdptxphy_hdmi0>;
|
||||
+ phys = <&hdptxphy0>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&hdmim0_tx0_cec &hdmim0_tx0_hpd
|
||||
&hdmim0_tx0_scl &hdmim0_tx0_sda>;
|
||||
@@ -2810,7 +2810,7 @@
|
||||
#dma-cells = <1>;
|
||||
};
|
||||
|
||||
- hdptxphy_hdmi0: phy@fed60000 {
|
||||
+ hdptxphy0: phy@fed60000 {
|
||||
compatible = "rockchip,rk3588-hdptx-phy";
|
||||
reg = <0x0 0xfed60000 0x0 0x2000>;
|
||||
clocks = <&cru CLK_USB2PHY_HDPTXRXPHY_REF>, <&cru PCLK_HDPTX0>;
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
From ea97212a0f66b7bd71c23c12f781f1770dd6fcff Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Wed, 11 Dec 2024 01:06:15 +0200
|
||||
Subject: arm64: dts: rockchip: Add PHY node for HDMI1 TX port on RK3588
|
||||
|
||||
In preparation to enable the second HDMI output port found on RK3588
|
||||
SoC, add the related PHY node. This requires a GRF, hence add the
|
||||
dependent node as well.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Jagan Teki <jagan@edgeble.ai> # edgeble-6tops-modules
|
||||
Tested-by: Alexandre ARNOUD <aarnoud@me.com>
|
||||
Link: https://lore.kernel.org/r/20241211-rk3588-hdmi1-v2-2-02cdca22ff68@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
@@ -67,6 +67,11 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ hdptxphy1_grf: syscon@fd5e4000 {
|
||||
+ compatible = "rockchip,rk3588-hdptxphy-grf", "syscon";
|
||||
+ reg = <0x0 0xfd5e4000 0x0 0x100>;
|
||||
+ };
|
||||
+
|
||||
i2s8_8ch: i2s@fddc8000 {
|
||||
compatible = "rockchip,rk3588-i2s-tdm";
|
||||
reg = <0x0 0xfddc8000 0x0 0x1000>;
|
||||
@@ -395,6 +400,22 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ hdptxphy1: phy@fed70000 {
|
||||
+ compatible = "rockchip,rk3588-hdptx-phy";
|
||||
+ reg = <0x0 0xfed70000 0x0 0x2000>;
|
||||
+ clocks = <&cru CLK_USB2PHY_HDPTXRXPHY_REF>, <&cru PCLK_HDPTX1>;
|
||||
+ clock-names = "ref", "apb";
|
||||
+ #phy-cells = <0>;
|
||||
+ resets = <&cru SRST_HDPTX1>, <&cru SRST_P_HDPTX1>,
|
||||
+ <&cru SRST_HDPTX1_INIT>, <&cru SRST_HDPTX1_CMN>,
|
||||
+ <&cru SRST_HDPTX1_LANE>, <&cru SRST_HDPTX1_ROPLL>,
|
||||
+ <&cru SRST_HDPTX1_LCPLL>;
|
||||
+ reset-names = "phy", "apb", "init", "cmn", "lane", "ropll",
|
||||
+ "lcpll";
|
||||
+ rockchip,grf = <&hdptxphy1_grf>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
usbdp_phy1: phy@fed90000 {
|
||||
compatible = "rockchip,rk3588-usbdp-phy";
|
||||
reg = <0x0 0xfed90000 0x0 0x10000>;
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
From bed6964e779b5853de042da14320edf9f79506fe Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Wed, 11 Dec 2024 01:06:16 +0200
|
||||
Subject: arm64: dts: rockchip: Add HDMI1 node on RK3588
|
||||
|
||||
Add support for the second HDMI TX port found on RK3588 SoC.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Jagan Teki <jagan@edgeble.ai> # edgeble-6tops-modules
|
||||
Tested-by: Alexandre ARNOUD <aarnoud@me.com>
|
||||
Link: https://lore.kernel.org/r/20241211-rk3588-hdmi1-v2-3-02cdca22ff68@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
@@ -140,6 +140,47 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
+ hdmi1: hdmi@fdea0000 {
|
||||
+ compatible = "rockchip,rk3588-dw-hdmi-qp";
|
||||
+ reg = <0x0 0xfdea0000 0x0 0x20000>;
|
||||
+ clocks = <&cru PCLK_HDMITX1>,
|
||||
+ <&cru CLK_HDMITX1_EARC>,
|
||||
+ <&cru CLK_HDMITX1_REF>,
|
||||
+ <&cru MCLK_I2S6_8CH_TX>,
|
||||
+ <&cru CLK_HDMIHDP1>,
|
||||
+ <&cru HCLK_VO1>;
|
||||
+ clock-names = "pclk", "earc", "ref", "aud", "hdp", "hclk_vo1";
|
||||
+ interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
+ <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
+ <GIC_SPI 175 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
+ <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
+ <GIC_SPI 361 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
+ interrupt-names = "avp", "cec", "earc", "main", "hpd";
|
||||
+ phys = <&hdptxphy1>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&hdmim2_tx1_cec &hdmim0_tx1_hpd
|
||||
+ &hdmim1_tx1_scl &hdmim1_tx1_sda>;
|
||||
+ power-domains = <&power RK3588_PD_VO1>;
|
||||
+ resets = <&cru SRST_HDMITX1_REF>, <&cru SRST_HDMIHDP1>;
|
||||
+ reset-names = "ref", "hdp";
|
||||
+ rockchip,grf = <&sys_grf>;
|
||||
+ rockchip,vo-grf = <&vo1_grf>;
|
||||
+ status = "disabled";
|
||||
+
|
||||
+ ports {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ hdmi1_in: port@0 {
|
||||
+ reg = <0>;
|
||||
+ };
|
||||
+
|
||||
+ hdmi1_out: port@1 {
|
||||
+ reg = <1>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
pcie3x4: pcie@fe150000 {
|
||||
compatible = "rockchip,rk3588-pcie", "rockchip,rk3568-pcie";
|
||||
#address-cells = <3>;
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
From aadaa27956e3430217d9e6b8af5880e39b05b961 Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 23 Feb 2025 11:31:39 +0200
|
||||
Subject: arm64: dts: rockchip: Enable HDMI1 PHY clk provider on RK3588
|
||||
|
||||
Since commit c4b09c562086 ("phy: phy-rockchip-samsung-hdptx: Add clock
|
||||
provider support"), the HDMI PHY PLL can be used as an alternative and
|
||||
more accurate pixel clock source for VOP2 to improve display modes
|
||||
handling on RK3588 SoC.
|
||||
|
||||
Add the missing #clock-cells property to allow using the clock provider
|
||||
functionality of HDMI1 PHY.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250223-vop2-hdmi1-disp-modes-v2-3-f4cec5e06fbe@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
@@ -446,6 +446,7 @@
|
||||
reg = <0x0 0xfed70000 0x0 0x2000>;
|
||||
clocks = <&cru CLK_USB2PHY_HDPTXRXPHY_REF>, <&cru PCLK_HDPTX1>;
|
||||
clock-names = "ref", "apb";
|
||||
+ #clock-cells = <0>;
|
||||
#phy-cells = <0>;
|
||||
resets = <&cru SRST_HDPTX1>, <&cru SRST_P_HDPTX1>,
|
||||
<&cru SRST_HDPTX1_INIT>, <&cru SRST_HDPTX1_CMN>,
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
From b2e668a60ed866ba960acb5310d1fb6bf81d154f Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 23 Feb 2025 11:31:40 +0200
|
||||
Subject: arm64: dts: rockchip: Add HDMI1 PHY PLL clock source to VOP2 on
|
||||
RK3588
|
||||
|
||||
VOP2 on RK3588 is able to use the HDMI PHY PLL as an alternative and
|
||||
more accurate pixel clock source to improve handling of display modes up
|
||||
to 4K@60Hz on video ports 0, 1 and 2.
|
||||
|
||||
The HDMI1 PHY PLL clock source cannot be added directly to vop node in
|
||||
rk3588-base.dtsi, along with the HDMI0 related one, because HDMI1 is an
|
||||
optional feature and its PHY node belongs to a separate (extra) DT file.
|
||||
|
||||
Therefore, add the HDMI1 PHY PLL clock source to VOP2 by overwriting its
|
||||
clocks & clock-names properties in the extra DT file.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250223-vop2-hdmi1-disp-modes-v2-4-f4cec5e06fbe@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
@@ -509,3 +509,24 @@
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
+
|
||||
+&vop {
|
||||
+ clocks = <&cru ACLK_VOP>,
|
||||
+ <&cru HCLK_VOP>,
|
||||
+ <&cru DCLK_VOP0>,
|
||||
+ <&cru DCLK_VOP1>,
|
||||
+ <&cru DCLK_VOP2>,
|
||||
+ <&cru DCLK_VOP3>,
|
||||
+ <&cru PCLK_VOP_ROOT>,
|
||||
+ <&hdptxphy0>,
|
||||
+ <&hdptxphy1>;
|
||||
+ clock-names = "aclk",
|
||||
+ "hclk",
|
||||
+ "dclk_vp0",
|
||||
+ "dclk_vp1",
|
||||
+ "dclk_vp2",
|
||||
+ "dclk_vp3",
|
||||
+ "pclk_vop",
|
||||
+ "pll_hdmiphy0",
|
||||
+ "pll_hdmiphy1";
|
||||
+};
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
From 6ee0b9ad3995ee5fa229035c69013b7dd0d3634b Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Tue, 4 Feb 2025 16:35:51 +0100
|
||||
Subject: [PATCH] arm64: dts: rockchip: Add rng node to RK3588
|
||||
|
||||
Add the RK3588's standalone hardware random number generator node to its
|
||||
device tree, and enable it.
|
||||
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250204-rk3588-trng-submission-v2-6-608172b6fd91@collabora.com
|
||||
[changed reset-id to its numeric value while the constant makes its
|
||||
way through the crypto tree]
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3588-base.dtsi | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
@@ -1921,6 +1921,14 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
+ rng@fe378000 {
|
||||
+ compatible = "rockchip,rk3588-rng";
|
||||
+ reg = <0x0 0xfe378000 0x0 0x200>;
|
||||
+ interrupts = <GIC_SPI 400 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
+ clocks = <&scmi_clk SCMI_HCLK_SECURE_NS>;
|
||||
+ resets = <&scmi_reset 48>;
|
||||
+ };
|
||||
+
|
||||
i2s0_8ch: i2s@fe470000 {
|
||||
compatible = "rockchip,rk3588-i2s-tdm";
|
||||
reg = <0x0 0xfe470000 0x0 0x1000>;
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
From b8c6c136971c0e9750eec89f367529b2854d3a3c Mon Sep 17 00:00:00 2001
|
||||
From: Detlev Casanova <detlev.casanova@collabora.com>
|
||||
Date: Mon, 17 Feb 2025 16:47:41 -0500
|
||||
Subject: arm64: dts: rockchip: Add HDMI audio outputs for rk3588
|
||||
|
||||
For hdmi0_sound, use the simple-audio-card driver with the hdmi0 QP node
|
||||
as CODEC and the i2s5 device as CPU.
|
||||
|
||||
Similarly for hdmi1_sound, the CODEC is the hdmi1 node and the CPU is
|
||||
i2s6, but only added in the rk3588-extra.dtsi device tree as the second
|
||||
TX HDMI port is not available on base versions of the SoC.
|
||||
|
||||
The simple-audio-card,mclk-fs value is set to 128 as it is done in
|
||||
the downstream driver.
|
||||
|
||||
The #sound-dai-cells value is set to 0 in the hdmi0 and hdmi1 nodes so
|
||||
that they can be used as audio codec nodes.
|
||||
|
||||
Tested-by: Quentin Schulz <quentin.schulz@cherry.de> # RK3588 Tiger Haikou
|
||||
Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
|
||||
Fixes: 419d1918105e ("ASoC: simple-card-utils: use __free(device_node) for device node")
|
||||
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
||||
Link: https://lore.kernel.org/r/20250217215641.372723-3-detlev.casanova@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
@@ -382,6 +382,22 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ hdmi0_sound: hdmi0-sound {
|
||||
+ compatible = "simple-audio-card";
|
||||
+ simple-audio-card,format = "i2s";
|
||||
+ simple-audio-card,mclk-fs = <128>;
|
||||
+ simple-audio-card,name = "hdmi0";
|
||||
+ status = "disabled";
|
||||
+
|
||||
+ simple-audio-card,codec {
|
||||
+ sound-dai = <&hdmi0>;
|
||||
+ };
|
||||
+
|
||||
+ simple-audio-card,cpu {
|
||||
+ sound-dai = <&i2s5_8ch>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
pmu-a55 {
|
||||
compatible = "arm,cortex-a55-pmu";
|
||||
interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH &ppi_partition0>;
|
||||
@@ -1396,6 +1412,7 @@
|
||||
reset-names = "ref", "hdp";
|
||||
rockchip,grf = <&sys_grf>;
|
||||
rockchip,vo-grf = <&vo1_grf>;
|
||||
+ #sound-dai-cells = <0>;
|
||||
status = "disabled";
|
||||
|
||||
ports {
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
@@ -7,6 +7,22 @@
|
||||
#include "rk3588-extra-pinctrl.dtsi"
|
||||
|
||||
/ {
|
||||
+ hdmi1_sound: hdmi1-sound {
|
||||
+ compatible = "simple-audio-card";
|
||||
+ simple-audio-card,format = "i2s";
|
||||
+ simple-audio-card,mclk-fs = <128>;
|
||||
+ simple-audio-card,name = "hdmi1";
|
||||
+ status = "disabled";
|
||||
+
|
||||
+ simple-audio-card,codec {
|
||||
+ sound-dai = <&hdmi1>;
|
||||
+ };
|
||||
+
|
||||
+ simple-audio-card,cpu {
|
||||
+ sound-dai = <&i2s6_8ch>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
usb_host1_xhci: usb@fc400000 {
|
||||
compatible = "rockchip,rk3588-dwc3", "snps,dwc3";
|
||||
reg = <0x0 0xfc400000 0x0 0x400000>;
|
||||
@@ -165,6 +181,7 @@
|
||||
reset-names = "ref", "hdp";
|
||||
rockchip,grf = <&sys_grf>;
|
||||
rockchip,vo-grf = <&vo1_grf>;
|
||||
+ #sound-dai-cells = <0>;
|
||||
status = "disabled";
|
||||
|
||||
ports {
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
From f94500eb7328b35f3d0927635b1aba26c85ea4b0 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Thu, 20 Feb 2025 19:58:11 +0100
|
||||
Subject: arm64: dts: rockchip: Add GPU power domain regulator dependency for
|
||||
RK3588
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Enabling the GPU power domain requires that the GPU regulator is
|
||||
enabled. The regulator is enabled at boot time, but gets disabled
|
||||
automatically when there are no users.
|
||||
|
||||
This means the system might run into a failure state hanging the
|
||||
whole system for the following use cases:
|
||||
|
||||
* if the GPU driver is being probed late (e.g. build as a
|
||||
module and firmware is not in initramfs), the regulator
|
||||
might already have been disabled. In that case the power
|
||||
domain is enabled before the regulator.
|
||||
* unbinding the GPU driver will disable the PM domain and
|
||||
the regulator. When the driver is bound again, the PM
|
||||
domain will be enabled before the regulator and error
|
||||
appears.
|
||||
|
||||
Avoid this by adding an explicit regulator dependency to the
|
||||
power domain.
|
||||
|
||||
Tested-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Reported-by: Adrián Martínez Larumbe <adrian.larumbe@collabora.com>
|
||||
Tested-by: Adrian Larumbe <adrian.larumbe@collabora.com> # On Rock 5B
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250220-rk3588-gpu-pwr-domain-regulator-v6-8-a4f9c24e5b81@kernel.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
@@ -880,7 +880,7 @@
|
||||
};
|
||||
};
|
||||
/* These power domains are grouped by VD_GPU */
|
||||
- power-domain@RK3588_PD_GPU {
|
||||
+ pd_gpu: power-domain@RK3588_PD_GPU {
|
||||
reg = <RK3588_PD_GPU>;
|
||||
clocks = <&cru CLK_GPU>,
|
||||
<&cru CLK_GPU_COREGROUP>,
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
From 55a43c346d24434e46ef7fcc09a9df8179c346e4 Mon Sep 17 00:00:00 2001
|
||||
From: Heiko Stuebner <heiko@sntech.de>
|
||||
Date: Sun, 16 Feb 2025 16:27:42 +0100
|
||||
Subject: [PATCH] arm64: dts: rockchip: change rng reset id back to its
|
||||
constant value
|
||||
|
||||
With the binding header now providing the SCMI_SRST_H_TRNG_NS constant,
|
||||
switch back to it from the temporary numeric value.
|
||||
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3588-base.dtsi | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
@@ -1943,7 +1943,7 @@
|
||||
reg = <0x0 0xfe378000 0x0 0x200>;
|
||||
interrupts = <GIC_SPI 400 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
clocks = <&scmi_clk SCMI_HCLK_SECURE_NS>;
|
||||
- resets = <&scmi_reset 48>;
|
||||
+ resets = <&scmi_reset SCMI_SRST_H_TRNG_NS>;
|
||||
};
|
||||
|
||||
i2s0_8ch: i2s@fe470000 {
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
From 0327238991ba2d1de25e1116b1c064f433e45b8d Mon Sep 17 00:00:00 2001
|
||||
From: Shreeya Patel <shreeya.patel@collabora.com>
|
||||
Date: Fri, 7 Mar 2025 12:18:56 +0300
|
||||
Subject: arm64: dts: rockchip: Add device tree support for HDMI RX Controller
|
||||
|
||||
Add device tree support for Synopsys DesignWare HDMI RX
|
||||
Controller.
|
||||
|
||||
Reviewed-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
|
||||
Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
|
||||
Co-developed-by: Dingxian Wen <shawn.wen@rock-chips.com>
|
||||
Signed-off-by: Dingxian Wen <shawn.wen@rock-chips.com>
|
||||
Signed-off-by: Shreeya Patel <shreeya.patel@collabora.com>
|
||||
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250307091857.646581-2-dmitry.osipenko@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
|
||||
@@ -23,6 +23,30 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ reserved-memory {
|
||||
+ #address-cells = <2>;
|
||||
+ #size-cells = <2>;
|
||||
+ ranges;
|
||||
+
|
||||
+ /*
|
||||
+ * The 4k HDMI capture controller works only with 32bit
|
||||
+ * phys addresses and doesn't support IOMMU. HDMI RX CMA
|
||||
+ * must be reserved below 4GB.
|
||||
+ * The size of 160MB was determined as follows:
|
||||
+ * (3840 * 2160 pixels) * (4 bytes/pixel) * (2 frames/buffer) / 10^6 = 66MB
|
||||
+ * To ensure sufficient support for practical use-cases,
|
||||
+ * we doubled the 66MB value.
|
||||
+ */
|
||||
+ hdmi_receiver_cma: hdmi-receiver-cma {
|
||||
+ compatible = "shared-dma-pool";
|
||||
+ alloc-ranges = <0x0 0x0 0x0 0xffffffff>;
|
||||
+ size = <0x0 (160 * 0x100000)>; /* 160MiB */
|
||||
+ alignment = <0x0 0x40000>; /* 64K */
|
||||
+ no-map;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
usb_host1_xhci: usb@fc400000 {
|
||||
compatible = "rockchip,rk3588-dwc3", "snps,dwc3";
|
||||
reg = <0x0 0xfc400000 0x0 0x400000>;
|
||||
@@ -198,6 +222,37 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ hdmi_receiver: hdmi_receiver@fdee0000 {
|
||||
+ compatible = "rockchip,rk3588-hdmirx-ctrler", "snps,dw-hdmi-rx";
|
||||
+ reg = <0x0 0xfdee0000 0x0 0x6000>;
|
||||
+ interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
+ <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||
+ <GIC_SPI 179 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
+ interrupt-names = "cec", "hdmi", "dma";
|
||||
+ clocks = <&cru ACLK_HDMIRX>,
|
||||
+ <&cru CLK_HDMIRX_AUD>,
|
||||
+ <&cru CLK_CR_PARA>,
|
||||
+ <&cru PCLK_HDMIRX>,
|
||||
+ <&cru CLK_HDMIRX_REF>,
|
||||
+ <&cru PCLK_S_HDMIRX>,
|
||||
+ <&cru HCLK_VO1>;
|
||||
+ clock-names = "aclk",
|
||||
+ "audio",
|
||||
+ "cr_para",
|
||||
+ "pclk",
|
||||
+ "ref",
|
||||
+ "hclk_s_hdmirx",
|
||||
+ "hclk_vo1";
|
||||
+ memory-region = <&hdmi_receiver_cma>;
|
||||
+ power-domains = <&power RK3588_PD_VO1>;
|
||||
+ resets = <&cru SRST_A_HDMIRX>, <&cru SRST_P_HDMIRX>,
|
||||
+ <&cru SRST_HDMIRX_REF>, <&cru SRST_A_HDMIRX_BIU>;
|
||||
+ reset-names = "axi", "apb", "ref", "biu";
|
||||
+ rockchip,grf = <&sys_grf>;
|
||||
+ rockchip,vo1-grf = <&vo1_grf>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
pcie3x4: pcie@fe150000 {
|
||||
compatible = "rockchip,rk3588-pcie", "rockchip,rk3568-pcie";
|
||||
#address-cells = <3>;
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
From 9d856aa1c81930a5d8df0e29d6cb0faa3fa87206 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Fri, 31 Oct 2025 16:58:24 +0100
|
||||
Subject: [PATCH] arm64: dts: rockchip: add eMMC CQE support for rk3588
|
||||
|
||||
The RK3588 eMMC controller supports CQE, so add the missing
|
||||
DT flag.
|
||||
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Link: https://patch.msgid.link/20251031-rockchip-emmc-cqe-support-v2-2-958171f5edad@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3588-base.dtsi | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
|
||||
@@ -1935,6 +1935,7 @@
|
||||
<&cru SRST_A_EMMC>, <&cru SRST_B_EMMC>,
|
||||
<&cru SRST_T_EMMC>;
|
||||
reset-names = "core", "bus", "axi", "block", "timer";
|
||||
+ supports-cqe;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
From a98053d098c4ad91a45a3a55604d9574dfc6ffdb Mon Sep 17 00:00:00 2001
|
||||
From: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Date: Sat, 19 Oct 2024 02:50:08 +0000
|
||||
Subject: arm64: dts: rockchip: add and enable gpu node for Radxa ROCK 5A
|
||||
|
||||
add gpu node to make it usable on Radxa ROCK 5A.
|
||||
|
||||
Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Link: https://lore.kernel.org/r/20241019025008.852-1-naoki@radxa.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
@@ -166,6 +166,11 @@
|
||||
cpu-supply = <&vdd_cpu_lit_s0>;
|
||||
};
|
||||
|
||||
+&gpu {
|
||||
+ mali-supply = <&vdd_gpu_s0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c0m2_xfer>;
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
From f57a8daf6bbd8e71f16693ad6d8421cb881c7fe0 Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Tue, 22 Oct 2024 19:04:42 +0300
|
||||
Subject: arm64: dts: rockchip: Enable HDMI0 on rock-5a
|
||||
|
||||
Add the necessary DT changes to enable HDMI0 on Radxa ROCK 5A.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20241022-rk3588-hdmi0-dt-v3-1-3cc981e89afb@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/leds/common.h>
|
||||
#include <dt-bindings/pinctrl/rockchip.h>
|
||||
+#include <dt-bindings/soc/rockchip,vop2.h>
|
||||
#include "rk3588s.dtsi"
|
||||
|
||||
/ {
|
||||
@@ -35,6 +36,17 @@
|
||||
stdout-path = "serial2:1500000n8";
|
||||
};
|
||||
|
||||
+ hdmi0-con {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ type = "d";
|
||||
+
|
||||
+ port {
|
||||
+ hdmi0_con_in: endpoint {
|
||||
+ remote-endpoint = <&hdmi0_out_con>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
@@ -302,6 +314,31 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&hdmi0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&hdmim0_tx0_cec
|
||||
+ &hdmim1_tx0_hpd
|
||||
+ &hdmim0_tx0_scl
|
||||
+ &hdmim0_tx0_sda>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi0_in {
|
||||
+ hdmi0_in_vp0: endpoint {
|
||||
+ remote-endpoint = <&vp0_out_hdmi0>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdmi0_out {
|
||||
+ hdmi0_out_con: endpoint {
|
||||
+ remote-endpoint = <&hdmi0_con_in>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdptxphy_hdmi0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&mdio1 {
|
||||
rgmii_phy1: ethernet-phy@1 {
|
||||
/* RTL8211F */
|
||||
@@ -794,3 +831,18 @@
|
||||
&usb_host2_xhci {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&vop_mmu {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vop {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vp0 {
|
||||
+ vp0_out_hdmi0: endpoint@ROCKCHIP_VOP2_EP_HDMI0 {
|
||||
+ reg = <ROCKCHIP_VOP2_EP_HDMI0>;
|
||||
+ remote-endpoint = <&hdmi0_in_vp0>;
|
||||
+ };
|
||||
+};
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
From 9f3360b42bb5b0c99073827a3dd81d2568b2a4ed Mon Sep 17 00:00:00 2001
|
||||
From: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Date: Mon, 28 Oct 2024 07:23:44 +0000
|
||||
Subject: arm64: dts: rockchip: sort rk3588s-rock5a properly in Makefile
|
||||
|
||||
sort target dtb files properly in Makefile for rockchip.
|
||||
|
||||
Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Link: https://lore.kernel.org/r/20241028072344.1514-1-naoki@radxa.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/Makefile
|
||||
+++ b/arch/arm64/boot/dts/rockchip/Makefile
|
||||
@@ -151,6 +151,6 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-i
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-khadas-edge2.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-nanopi-r6s.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-nanopi-r6c.dtb
|
||||
-dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-rock-5a.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-odroid-m2.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-orangepi-5.dtb
|
||||
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-rock-5a.dtb
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
From 5c96e63301978f4657c9082c55a066763c8db7b1 Mon Sep 17 00:00:00 2001
|
||||
From: Johan Jonker <jbx6244@gmail.com>
|
||||
Date: Sat, 5 Oct 2024 22:40:12 +0200
|
||||
Subject: arm64: dts: rockchip: adapt regulator nodenames to preferred form
|
||||
|
||||
The preferred nodename for fixed-regulators has changed to
|
||||
pattern: '^regulator(-[0-9]+v[0-9]+|-[0-9a-z-]+)?$'
|
||||
|
||||
Fix all Rockchip DT regulator nodenames.
|
||||
|
||||
Signed-off-by: Johan Jonker <jbx6244@gmail.com>
|
||||
Link: https://lore.kernel.org/r/0ae40493-93e9-40cd-9ca9-990ae064f21a@gmail.com
|
||||
[adapted rebased on top of a number of other changes and included
|
||||
neu6a-wifi + wolfvision-pf5-io-expander overlays]
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
@@ -68,7 +68,7 @@
|
||||
#cooling-cells = <2>;
|
||||
};
|
||||
|
||||
- vcc12v_dcin: vcc12v-dcin-regulator {
|
||||
+ vcc12v_dcin: regulator-vcc12v-dcin {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc12v_dcin";
|
||||
regulator-always-on;
|
||||
@@ -77,7 +77,7 @@
|
||||
regulator-max-microvolt = <12000000>;
|
||||
};
|
||||
|
||||
- vcc3v3_wf: vcc3v3-wf-regulator {
|
||||
+ vcc3v3_wf: regulator-vcc3v3-wf {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc3v3_wf";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
@@ -89,7 +89,7 @@
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
- vcc5v0_host: vcc5v0-host-regulator {
|
||||
+ vcc5v0_host: regulator-vcc5v0-host {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc5v0_host";
|
||||
regulator-boot-on;
|
||||
@@ -103,7 +103,7 @@
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
- vcc5v0_sys: vcc5v0-sys-regulator {
|
||||
+ vcc5v0_sys: regulator-vcc5v0-sys {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc5v0_sys";
|
||||
regulator-always-on;
|
||||
@@ -113,7 +113,7 @@
|
||||
vin-supply = <&vcc12v_dcin>;
|
||||
};
|
||||
|
||||
- vcc_5v0: vcc-5v0-regulator {
|
||||
+ vcc_5v0: regulator-vcc-5v0 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc_5v0";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
@@ -127,7 +127,7 @@
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
- vcc_1v1_nldo_s3: vcc-1v1-nldo-s3-regulator {
|
||||
+ vcc_1v1_nldo_s3: regulator-vcc-1v1-nldo-s3 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc_1v1_nldo_s3";
|
||||
regulator-always-on;
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
From 2efdb041019fd6c58abefba3eb6fdc4d659e576c Mon Sep 17 00:00:00 2001
|
||||
From: Damon Ding <damon.ding@rock-chips.com>
|
||||
Date: Thu, 6 Feb 2025 11:03:30 +0800
|
||||
Subject: arm64: dts: rockchip: Fix label name of hdptxphy for RK3588
|
||||
|
||||
The hdptxphy is a combo transmit-PHY for HDMI2.1 TMDS Link, FRL Link, DP
|
||||
and eDP Link. Therefore, it is better to name it hdptxphy0 other than
|
||||
hdptxphy_hdmi0, which will be referenced by both hdmi0 and edp0 nodes.
|
||||
|
||||
Signed-off-by: Damon Ding <damon.ding@rock-chips.com>
|
||||
Link: https://lore.kernel.org/r/20250206030330.680424-3-damon.ding@rock-chips.com
|
||||
[added armsom-sige7, where hdmi-support was added recently and also
|
||||
the hdptxphy0-as-dclk source I just added]
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
@@ -335,7 +335,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
-&hdptxphy_hdmi0 {
|
||||
+&hdptxphy0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
From f94500eb7328b35f3d0927635b1aba26c85ea4b0 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Thu, 20 Feb 2025 19:58:11 +0100
|
||||
Subject: arm64: dts: rockchip: Add GPU power domain regulator dependency for
|
||||
RK3588
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Enabling the GPU power domain requires that the GPU regulator is
|
||||
enabled. The regulator is enabled at boot time, but gets disabled
|
||||
automatically when there are no users.
|
||||
|
||||
This means the system might run into a failure state hanging the
|
||||
whole system for the following use cases:
|
||||
|
||||
* if the GPU driver is being probed late (e.g. build as a
|
||||
module and firmware is not in initramfs), the regulator
|
||||
might already have been disabled. In that case the power
|
||||
domain is enabled before the regulator.
|
||||
* unbinding the GPU driver will disable the PM domain and
|
||||
the regulator. When the driver is bound again, the PM
|
||||
domain will be enabled before the regulator and error
|
||||
appears.
|
||||
|
||||
Avoid this by adding an explicit regulator dependency to the
|
||||
power domain.
|
||||
|
||||
Tested-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Reported-by: Adrián Martínez Larumbe <adrian.larumbe@collabora.com>
|
||||
Tested-by: Adrian Larumbe <adrian.larumbe@collabora.com> # On Rock 5B
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250220-rk3588-gpu-pwr-domain-regulator-v6-8-a4f9c24e5b81@kernel.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
||||
@@ -360,6 +360,10 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&pd_gpu {
|
||||
+ domain-supply = <&vdd_gpu_s0>;
|
||||
+};
|
||||
+
|
||||
&pinctrl {
|
||||
leds {
|
||||
io_led: io-led {
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
From 3ca743f8a5b568dc5e5d5f1bab0298a4a43c2360 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||
Date: Fri, 27 Sep 2024 14:42:22 +0200
|
||||
Subject: arm64: dts: rockchip: Switch to hp-det-gpios
|
||||
|
||||
Replace the deprecated "hp-det-gpio" property by "hp-det-gpios" in Audio
|
||||
Graph Card and Realtek RT5651 Audio Codec device nodes.
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||
Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
|
||||
Link: https://lore.kernel.org/r/717e7c9527139c3a3e5246dd367a3ad98c5c81b6.1727438777.git.geert+renesas@glider.be
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
@@ -32,7 +32,7 @@
|
||||
"Headphones", "HPOR";
|
||||
|
||||
dais = <&i2s0_8ch_p0>;
|
||||
- hp-det-gpio = <&gpio1 RK_PD5 GPIO_ACTIVE_HIGH>;
|
||||
+ hp-det-gpios = <&gpio1 RK_PD5 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&hp_detect>;
|
||||
};
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
From c8152f79c2dd8039e14073be76fdbce8760175da Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sat, 19 Oct 2024 13:12:11 +0300
|
||||
Subject: arm64: dts: rockchip: Enable HDMI0 on rock-5b
|
||||
|
||||
Add the necessary DT changes to enable HDMI0 on Radxa ROCK 5B.
|
||||
|
||||
Tested-by: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20241019-rk3588-hdmi0-dt-v2-2-466cd80e8ff9@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/leds/common.h>
|
||||
+#include <dt-bindings/soc/rockchip,vop2.h>
|
||||
#include "rk3588.dtsi"
|
||||
|
||||
/ {
|
||||
@@ -37,6 +38,17 @@
|
||||
pinctrl-0 = <&hp_detect>;
|
||||
};
|
||||
|
||||
+ hdmi0-con {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ type = "a";
|
||||
+
|
||||
+ port {
|
||||
+ hdmi0_con_in: endpoint {
|
||||
+ remote-endpoint = <&hdmi0_out_con>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
@@ -192,6 +204,26 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&hdmi0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi0_in {
|
||||
+ hdmi0_in_vp0: endpoint {
|
||||
+ remote-endpoint = <&vp0_out_hdmi0>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdmi0_out {
|
||||
+ hdmi0_out_con: endpoint {
|
||||
+ remote-endpoint = <&hdmi0_con_in>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdptxphy_hdmi0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c0m2_xfer>;
|
||||
@@ -858,3 +890,18 @@
|
||||
&usb_host2_xhci {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&vop_mmu {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vop {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vp0 {
|
||||
+ vp0_out_hdmi0: endpoint@ROCKCHIP_VOP2_EP_HDMI0 {
|
||||
+ reg = <ROCKCHIP_VOP2_EP_HDMI0>;
|
||||
+ remote-endpoint = <&hdmi0_in_vp0>;
|
||||
+ };
|
||||
+};
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
From 5c96e63301978f4657c9082c55a066763c8db7b1 Mon Sep 17 00:00:00 2001
|
||||
From: Johan Jonker <jbx6244@gmail.com>
|
||||
Date: Sat, 5 Oct 2024 22:40:12 +0200
|
||||
Subject: arm64: dts: rockchip: adapt regulator nodenames to preferred form
|
||||
|
||||
The preferred nodename for fixed-regulators has changed to
|
||||
pattern: '^regulator(-[0-9]+v[0-9]+|-[0-9a-z-]+)?$'
|
||||
|
||||
Fix all Rockchip DT regulator nodenames.
|
||||
|
||||
Signed-off-by: Johan Jonker <jbx6244@gmail.com>
|
||||
Link: https://lore.kernel.org/r/0ae40493-93e9-40cd-9ca9-990ae064f21a@gmail.com
|
||||
[adapted rebased on top of a number of other changes and included
|
||||
neu6a-wifi + wolfvision-pf5-io-expander overlays]
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
@@ -84,7 +84,7 @@
|
||||
shutdown-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
- vcc3v3_pcie2x1l0: vcc3v3-pcie2x1l0-regulator {
|
||||
+ vcc3v3_pcie2x1l0: regulator-vcc3v3-pcie2x1l0 {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-high;
|
||||
gpios = <&gpio1 RK_PD2 GPIO_ACTIVE_HIGH>;
|
||||
@@ -99,7 +99,7 @@
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
- vcc3v3_pcie2x1l2: vcc3v3-pcie2x1l2-regulator {
|
||||
+ vcc3v3_pcie2x1l2: regulator-vcc3v3-pcie2x1l2 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc3v3_pcie2x1l2";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
@@ -108,7 +108,7 @@
|
||||
vin-supply = <&vcc_3v3_s3>;
|
||||
};
|
||||
|
||||
- vcc3v3_pcie30: vcc3v3-pcie30-regulator {
|
||||
+ vcc3v3_pcie30: regulator-vcc3v3-pcie30 {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-high;
|
||||
gpios = <&gpio1 RK_PA4 GPIO_ACTIVE_HIGH>;
|
||||
@@ -121,7 +121,7 @@
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
- vcc5v0_host: vcc5v0-host-regulator {
|
||||
+ vcc5v0_host: regulator-vcc5v0-host {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc5v0_host";
|
||||
regulator-boot-on;
|
||||
@@ -135,7 +135,7 @@
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
- vcc5v0_sys: vcc5v0-sys-regulator {
|
||||
+ vcc5v0_sys: regulator-vcc5v0-sys {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc5v0_sys";
|
||||
regulator-always-on;
|
||||
@@ -144,7 +144,7 @@
|
||||
regulator-max-microvolt = <5000000>;
|
||||
};
|
||||
|
||||
- vcc_1v1_nldo_s3: vcc-1v1-nldo-s3-regulator {
|
||||
+ vcc_1v1_nldo_s3: regulator-vcc-1v1-nldo-s3 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc_1v1_nldo_s3";
|
||||
regulator-always-on;
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
From 2ddd93481bce86c6a46223f45accdb3b149a43e4 Mon Sep 17 00:00:00 2001
|
||||
From: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Date: Thu, 28 Nov 2024 12:06:30 +0000
|
||||
Subject: arm64: dts: rockchip: rename rfkill label for Radxa ROCK 5B
|
||||
|
||||
on ROCK 5B, there is no PCIe slot, instead there is a M.2 slot.
|
||||
rfkill pin is not exclusive to PCIe devices, there is SDIO Wi-Fi
|
||||
devices.
|
||||
|
||||
rename rfkill label from "rfkill-pcie-wlan" to "rfkill-m2-wlan", it
|
||||
matches with rfkill-bt.
|
||||
|
||||
Fixes: 82d40b141a4c ("arm64: dts: rockchip: add rfkill node for M.2 Key E WiFi on rock-5b")
|
||||
Reviewed-by: Dragan Simic <dsimic@manjaro.org>
|
||||
Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Fixes: 82d40b141a4c ("arm64: dts: rockchip: add rfkill node for M.2 Key E WiFi on rock-5b")
|
||||
Link: https://lore.kernel.org/r/20241128120631.37458-1-naoki@radxa.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
rfkill {
|
||||
compatible = "rfkill-gpio";
|
||||
- label = "rfkill-pcie-wlan";
|
||||
+ label = "rfkill-m2-wlan";
|
||||
radio-type = "wlan";
|
||||
shutdown-gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
From 2efdb041019fd6c58abefba3eb6fdc4d659e576c Mon Sep 17 00:00:00 2001
|
||||
From: Damon Ding <damon.ding@rock-chips.com>
|
||||
Date: Thu, 6 Feb 2025 11:03:30 +0800
|
||||
Subject: arm64: dts: rockchip: Fix label name of hdptxphy for RK3588
|
||||
|
||||
The hdptxphy is a combo transmit-PHY for HDMI2.1 TMDS Link, FRL Link, DP
|
||||
and eDP Link. Therefore, it is better to name it hdptxphy0 other than
|
||||
hdptxphy_hdmi0, which will be referenced by both hdmi0 and edp0 nodes.
|
||||
|
||||
Signed-off-by: Damon Ding <damon.ding@rock-chips.com>
|
||||
Link: https://lore.kernel.org/r/20250206030330.680424-3-damon.ding@rock-chips.com
|
||||
[added armsom-sige7, where hdmi-support was added recently and also
|
||||
the hdptxphy0-as-dclk source I just added]
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
@@ -220,7 +220,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
-&hdptxphy_hdmi0 {
|
||||
+&hdptxphy0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
From 77cea7ca13680e14119a3b9635c7ef16cd7ee44e Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Wed, 11 Dec 2024 01:06:17 +0200
|
||||
Subject: arm64: dts: rockchip: Enable HDMI1 on rock-5b
|
||||
|
||||
Add the necessary DT changes to enable the second HDMI output port on
|
||||
Radxa ROCK 5B.
|
||||
|
||||
While at it, switch the position of &vop_mmu and @vop to maintain the
|
||||
alphabetical order.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Alexandre ARNOUD <aarnoud@me.com>
|
||||
Link: https://lore.kernel.org/r/20241211-rk3588-hdmi1-v2-4-02cdca22ff68@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
@@ -49,6 +49,17 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ hdmi1-con {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ type = "a";
|
||||
+
|
||||
+ port {
|
||||
+ hdmi1_con_in: endpoint {
|
||||
+ remote-endpoint = <&hdmi1_out_con>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
@@ -220,10 +231,32 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&hdmi1 {
|
||||
+ pinctrl-0 = <&hdmim0_tx1_cec &hdmim0_tx1_hpd
|
||||
+ &hdmim1_tx1_scl &hdmim1_tx1_sda>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi1_in {
|
||||
+ hdmi1_in_vp1: endpoint {
|
||||
+ remote-endpoint = <&vp1_out_hdmi1>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdmi1_out {
|
||||
+ hdmi1_out_con: endpoint {
|
||||
+ remote-endpoint = <&hdmi1_con_in>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
&hdptxphy0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&hdptxphy1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c0m2_xfer>;
|
||||
@@ -891,11 +924,11 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
-&vop_mmu {
|
||||
+&vop {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
-&vop {
|
||||
+&vop_mmu {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -905,3 +938,10 @@
|
||||
remote-endpoint = <&hdmi0_in_vp0>;
|
||||
};
|
||||
};
|
||||
+
|
||||
+&vp1 {
|
||||
+ vp1_out_hdmi1: endpoint@ROCKCHIP_VOP2_EP_HDMI1 {
|
||||
+ reg = <ROCKCHIP_VOP2_EP_HDMI1>;
|
||||
+ remote-endpoint = <&hdmi1_in_vp1>;
|
||||
+ };
|
||||
+};
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
From 97aa62ed1e970bf8aa9f57e87c946a95fa3d5bef Mon Sep 17 00:00:00 2001
|
||||
From: Detlev Casanova <detlev.casanova@collabora.com>
|
||||
Date: Mon, 17 Feb 2025 16:47:42 -0500
|
||||
Subject: arm64: dts: rockchip: Enable HDMI audio outputs for Rock 5B
|
||||
|
||||
HDMI audio is available on the Rock 5B HDMI TX ports.
|
||||
Enable it for both ports.
|
||||
|
||||
Reviewed-by: Quentin Schulz <quentin.schulz@cherry.de>
|
||||
Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
|
||||
Fixes: 419d1918105e ("ASoC: simple-card-utils: use __free(device_node) for device node")
|
||||
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
||||
Link: https://lore.kernel.org/r/20250217215641.372723-4-detlev.casanova@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
@@ -231,6 +231,10 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&hdmi0_sound {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&hdmi1 {
|
||||
pinctrl-0 = <&hdmim0_tx1_cec &hdmim0_tx1_hpd
|
||||
&hdmim1_tx1_scl &hdmim1_tx1_sda>;
|
||||
@@ -249,6 +253,10 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&hdmi1_sound {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&hdptxphy0 {
|
||||
status = "okay";
|
||||
};
|
||||
@@ -351,6 +359,14 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&i2s5_8ch {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2s6_8ch {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&package_thermal {
|
||||
polling-delay = <1000>;
|
||||
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
From f94500eb7328b35f3d0927635b1aba26c85ea4b0 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Thu, 20 Feb 2025 19:58:11 +0100
|
||||
Subject: arm64: dts: rockchip: Add GPU power domain regulator dependency for
|
||||
RK3588
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Enabling the GPU power domain requires that the GPU regulator is
|
||||
enabled. The regulator is enabled at boot time, but gets disabled
|
||||
automatically when there are no users.
|
||||
|
||||
This means the system might run into a failure state hanging the
|
||||
whole system for the following use cases:
|
||||
|
||||
* if the GPU driver is being probed late (e.g. build as a
|
||||
module and firmware is not in initramfs), the regulator
|
||||
might already have been disabled. In that case the power
|
||||
domain is enabled before the regulator.
|
||||
* unbinding the GPU driver will disable the PM domain and
|
||||
the regulator. When the driver is bound again, the PM
|
||||
domain will be enabled before the regulator and error
|
||||
appears.
|
||||
|
||||
Avoid this by adding an explicit regulator dependency to the
|
||||
power domain.
|
||||
|
||||
Tested-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Reported-by: Adrián Martínez Larumbe <adrian.larumbe@collabora.com>
|
||||
Tested-by: Adrian Larumbe <adrian.larumbe@collabora.com> # On Rock 5B
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250220-rk3588-gpu-pwr-domain-regulator-v6-8-a4f9c24e5b81@kernel.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
@@ -425,6 +425,10 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&pd_gpu {
|
||||
+ domain-supply = <&vdd_gpu_s0>;
|
||||
+};
|
||||
+
|
||||
&pinctrl {
|
||||
hym8563 {
|
||||
hym8563_int: hym8563-int {
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
From c62d8fdb27391ee72bfdf53328463813997844f1 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Fri, 7 Mar 2025 12:18:57 +0300
|
||||
Subject: arm64: dts: rockchip: Enable HDMI receiver on rock-5b
|
||||
|
||||
The Rock 5B has a Micro HDMI port, which can be used for receiving
|
||||
HDMI data. This enables support for it.
|
||||
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Signed-off-by: Shreeya Patel <shreeya.patel@collabora.com>
|
||||
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250307091857.646581-3-dmitry.osipenko@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
@@ -257,6 +257,17 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&hdmi_receiver_cma {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_receiver {
|
||||
+ hpd-gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_LOW>;
|
||||
+ pinctrl-0 = <&hdmim1_rx_cec &hdmim1_rx_hpdin &hdmim1_rx_scl &hdmim1_rx_sda &hdmirx_hpd>;
|
||||
+ pinctrl-names = "default";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&hdptxphy0 {
|
||||
status = "okay";
|
||||
};
|
||||
@@ -430,6 +441,12 @@
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
+ hdmirx {
|
||||
+ hdmirx_hpd: hdmirx-5v-detection {
|
||||
+ rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
hym8563 {
|
||||
hym8563_int: hym8563-int {
|
||||
rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
From 425af91c58023a8924cc2330384e040d388adc4e Mon Sep 17 00:00:00 2001
|
||||
From: Diederik de Haas <didi.debian@cknow.org>
|
||||
Date: Fri, 25 Apr 2025 10:44:44 +0200
|
||||
Subject: arm64: dts: rockchip: Add vcc-supply to SPI flash on rk3588-rock-5b
|
||||
|
||||
The Radxa Rock 5B component placement document identifies the SPI Nor
|
||||
Flash chip as 'U4300' which is described on page 25 of the Schematic
|
||||
v1.45. There we can see that the VCC connector is connected to the
|
||||
VCC_3V3_S3 power source.
|
||||
|
||||
This fixes the following warning:
|
||||
|
||||
spi-nor spi5.0: supply vcc not found, using dummy regulator
|
||||
|
||||
Signed-off-by: Diederik de Haas <didi.debian@cknow.org>
|
||||
Link: https://lore.kernel.org/r/20250425092601.56549-5-didi.debian@cknow.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
@@ -562,6 +562,7 @@
|
||||
spi-max-frequency = <104000000>;
|
||||
spi-rx-bus-width = <4>;
|
||||
spi-tx-bus-width = <1>;
|
||||
+ vcc-supply = <&vcc_3v3_s3>;
|
||||
};
|
||||
};
|
||||
|
||||
+1948
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,149 @@
|
||||
From 376cb9696298df2028afb620a9dc6c4b10a18605 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Thu, 8 May 2025 19:48:53 +0200
|
||||
Subject: arm64: dts: rockchip: add Rock 5B+
|
||||
|
||||
Add ROCK 5B+, which is an improved version of the ROCK 5B with the
|
||||
following changes:
|
||||
|
||||
* Memory LPDDR4X -> LPDDR5
|
||||
* HDMI input connector size
|
||||
* eMMC socket -> onboard
|
||||
* M.2 E-Key is replaced by onboard RTL8852BE WLAN/BT
|
||||
* M.2 M-Key 1x4 lanes is replaced by 2x2 lanes
|
||||
* Added M.2 B-Key for USB connected WWAN modules (untested)
|
||||
* Add second camera port (not yet supported in upstream Linux)
|
||||
* Add dedicated USB-C port for device power (no impact in DT;
|
||||
the existing port has not been changed and the new port is
|
||||
handled by CH224D standalone chip)
|
||||
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250508-rock5bp-for-upstream-v2-4-677033cc1ac2@kernel.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/Makefile
|
||||
+++ b/arch/arm64/boot/dts/rockchip/Makefile
|
||||
@@ -142,6 +142,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-ro
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5b.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5b-pcie-ep.dtbo
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5b-pcie-srns.dtbo
|
||||
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5b-plus.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-tiger-haikou.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-toybrick-x0.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-turing-rk1.dtb
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts
|
||||
@@ -0,0 +1,113 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "rk3588-rock-5b.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "Radxa ROCK 5B+";
|
||||
+ compatible = "radxa,rock-5b-plus", "rockchip,rk3588";
|
||||
+
|
||||
+ rfkill-wwan {
|
||||
+ compatible = "rfkill-gpio";
|
||||
+ label = "rfkill-m2-wwan";
|
||||
+ radio-type = "wwan";
|
||||
+ shutdown-gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ vcc3v3_4g: regulator-vcc3v3-4g {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpios = <&gpio1 RK_PD2 GPIO_ACTIVE_HIGH>;
|
||||
+ /* pinctrl for the GPIO is requested by vcc3v3_pcie2x1l0 */
|
||||
+ regulator-name = "vcc3v3_4g";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ startup-delay-us = <50000>;
|
||||
+ vin-supply = <&vcc5v0_sys>;
|
||||
+ };
|
||||
+
|
||||
+ vcc3v3_wwan_pwr: regulator-vcc3v3-wwan {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&wwan_power_en>;
|
||||
+ regulator-name = "vcc3v3_wwan_pwr";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ vin-supply = <&vcc3v3_4g>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&gpio0 {
|
||||
+ wwan-disable2-n-hog {
|
||||
+ gpios = <RK_PB2 GPIO_ACTIVE_LOW>;
|
||||
+ output-low;
|
||||
+ line-name = "M.2 B-key W_DISABLE2#";
|
||||
+ gpio-hog;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&gpio2 {
|
||||
+ wwan-reset-n-hog {
|
||||
+ gpios = <RK_PB3 GPIO_ACTIVE_LOW>;
|
||||
+ output-low;
|
||||
+ line-name = "M.2 B-key RESET#";
|
||||
+ gpio-hog;
|
||||
+ };
|
||||
+
|
||||
+ wwan-wake-n-hog {
|
||||
+ gpios = <RK_PB2 GPIO_ACTIVE_LOW>;
|
||||
+ input;
|
||||
+ line-name = "M.2 B-key WoWWAN#";
|
||||
+ gpio-hog;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pcie30phy {
|
||||
+ data-lanes = <1 1 2 2>;
|
||||
+};
|
||||
+
|
||||
+&pcie3x2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie3x2_rst>;
|
||||
+ reset-gpios = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>;
|
||||
+ vpcie3v3-supply = <&vcc3v3_pcie30>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pcie3x4 {
|
||||
+ num-lanes = <2>;
|
||||
+};
|
||||
+
|
||||
+&pinctrl {
|
||||
+ wwan {
|
||||
+ wwan_power_en: wwan-pwr-en {
|
||||
+ rockchip,pins = <2 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pcie3 {
|
||||
+ pcie3x2_rst: pcie3x2-rst {
|
||||
+ rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ usb {
|
||||
+ vcc5v0_host_en: vcc5v0-host-en {
|
||||
+ rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&vcc5v0_host {
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&vcc5v0_host_en>;
|
||||
+};
|
||||
+1934
File diff suppressed because it is too large
Load Diff
+265
@@ -0,0 +1,265 @@
|
||||
From 988035f152709549a095b12fcdcb3cf26cbad63f Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Tue, 20 May 2025 20:50:10 +0200
|
||||
Subject: arm64: dts: rockchip: move common ROCK 5B/+ nodes into own tree
|
||||
|
||||
A few device tree nodes are shared between ROCK 5B and ROCK 5B+ that are
|
||||
not shared with ROCK 5T.
|
||||
|
||||
Move them into their own device tree include.
|
||||
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250520-add-rock5t-v2-3-1f1971850a20@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-5bp-5t.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-5bp-5t.dtsi
|
||||
@@ -18,23 +18,6 @@
|
||||
stdout-path = "serial2:1500000n8";
|
||||
};
|
||||
|
||||
- analog-sound {
|
||||
- compatible = "audio-graph-card";
|
||||
- label = "rk3588-es8316";
|
||||
-
|
||||
- widgets = "Microphone", "Mic Jack",
|
||||
- "Headphone", "Headphones";
|
||||
-
|
||||
- routing = "MIC2", "Mic Jack",
|
||||
- "Headphones", "HPOL",
|
||||
- "Headphones", "HPOR";
|
||||
-
|
||||
- dais = <&i2s0_8ch_p0>;
|
||||
- hp-det-gpios = <&gpio1 RK_PD5 GPIO_ACTIVE_HIGH>;
|
||||
- pinctrl-names = "default";
|
||||
- pinctrl-0 = <&hp_detect>;
|
||||
- };
|
||||
-
|
||||
hdmi0-con {
|
||||
compatible = "hdmi-connector";
|
||||
type = "a";
|
||||
@@ -57,19 +40,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
- leds {
|
||||
- compatible = "gpio-leds";
|
||||
- pinctrl-names = "default";
|
||||
- pinctrl-0 = <&led_rgb_b>;
|
||||
-
|
||||
- led_rgb_b {
|
||||
- function = LED_FUNCTION_STATUS;
|
||||
- color = <LED_COLOR_ID_BLUE>;
|
||||
- gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>;
|
||||
- linux,default-trigger = "heartbeat";
|
||||
- };
|
||||
- };
|
||||
-
|
||||
fan: pwm-fan {
|
||||
compatible = "pwm-fan";
|
||||
cooling-levels = <0 120 150 180 210 240 255>;
|
||||
@@ -78,13 +48,6 @@
|
||||
#cooling-cells = <2>;
|
||||
};
|
||||
|
||||
- rfkill {
|
||||
- compatible = "rfkill-gpio";
|
||||
- label = "rfkill-m2-wlan";
|
||||
- radio-type = "wlan";
|
||||
- shutdown-gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>;
|
||||
- };
|
||||
-
|
||||
rfkill-bt {
|
||||
compatible = "rfkill-gpio";
|
||||
label = "rfkill-m2-bt";
|
||||
@@ -95,9 +58,6 @@
|
||||
vcc3v3_pcie2x1l0: regulator-vcc3v3-pcie2x1l0 {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-high;
|
||||
- gpios = <&gpio1 RK_PD2 GPIO_ACTIVE_HIGH>;
|
||||
- pinctrl-names = "default";
|
||||
- pinctrl-0 = <&pcie2_0_vcc3v3_en>;
|
||||
regulator-name = "vcc3v3_pcie2x1l0";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
@@ -105,6 +65,7 @@
|
||||
regulator-max-microvolt = <3300000>;
|
||||
startup-delay-us = <50000>;
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
+ status = "disabled";
|
||||
};
|
||||
|
||||
vcc3v3_pcie2x1l2: regulator-vcc3v3-pcie2x1l2 {
|
||||
@@ -255,10 +216,8 @@
|
||||
};
|
||||
|
||||
&hdmi_receiver {
|
||||
- hpd-gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_LOW>;
|
||||
pinctrl-0 = <&hdmim1_rx_cec &hdmim1_rx_hpdin &hdmim1_rx_scl &hdmim1_rx_sda &hdmirx_hpd>;
|
||||
pinctrl-names = "default";
|
||||
- status = "okay";
|
||||
};
|
||||
|
||||
&hdptxphy0 {
|
||||
@@ -434,39 +393,17 @@
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
- hdmirx {
|
||||
- hdmirx_hpd: hdmirx-5v-detection {
|
||||
- rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
- };
|
||||
- };
|
||||
-
|
||||
hym8563 {
|
||||
hym8563_int: hym8563-int {
|
||||
rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
|
||||
- leds {
|
||||
- led_rgb_b: led-rgb-b {
|
||||
- rockchip,pins = <0 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
- };
|
||||
- };
|
||||
-
|
||||
- sound {
|
||||
- hp_detect: hp-detect {
|
||||
- rockchip,pins = <1 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
- };
|
||||
- };
|
||||
-
|
||||
pcie2 {
|
||||
pcie2_0_rst: pcie2-0-rst {
|
||||
rockchip,pins = <4 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
- pcie2_0_vcc3v3_en: pcie2-0-vcc-en {
|
||||
- rockchip,pins = <1 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
- };
|
||||
-
|
||||
pcie2_2_rst: pcie2-2-rst {
|
||||
rockchip,pins = <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
@@ -918,10 +855,6 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
-&usb_host2_xhci {
|
||||
- status = "okay";
|
||||
-};
|
||||
-
|
||||
&vop {
|
||||
status = "okay";
|
||||
};
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
-#include "rk3588-rock-5b-5bp-5t.dtsi"
|
||||
+#include "rk3588-rock-5b.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Radxa ROCK 5B+";
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
-#include "rk3588-rock-5b-5bp-5t.dtsi"
|
||||
+#include "rk3588-rock-5b.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Radxa ROCK 5B";
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dtsi
|
||||
@@ -0,0 +1,86 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "rk3588-rock-5b-5bp-5t.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ analog-sound {
|
||||
+ compatible = "audio-graph-card";
|
||||
+ label = "rk3588-es8316";
|
||||
+
|
||||
+ widgets = "Microphone", "Mic Jack",
|
||||
+ "Headphone", "Headphones";
|
||||
+
|
||||
+ routing = "MIC2", "Mic Jack",
|
||||
+ "Headphones", "HPOL",
|
||||
+ "Headphones", "HPOR";
|
||||
+
|
||||
+ dais = <&i2s0_8ch_p0>;
|
||||
+ hp-det-gpios = <&gpio1 RK_PD5 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&hp_detect>;
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&led_rgb_b>;
|
||||
+
|
||||
+ led_rgb_b {
|
||||
+ function = LED_FUNCTION_STATUS;
|
||||
+ color = <LED_COLOR_ID_BLUE>;
|
||||
+ gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>;
|
||||
+ linux,default-trigger = "heartbeat";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ rfkill {
|
||||
+ compatible = "rfkill-gpio";
|
||||
+ label = "rfkill-m2-wlan";
|
||||
+ radio-type = "wlan";
|
||||
+ shutdown-gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdmi_receiver {
|
||||
+ hpd-gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_LOW>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pinctrl {
|
||||
+ hdmirx {
|
||||
+ hdmirx_hpd: hdmirx-5v-detection {
|
||||
+ rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ led_rgb_b: led-rgb-b {
|
||||
+ rockchip,pins = <0 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pcie2 {
|
||||
+ pcie2_0_vcc3v3_en: pcie2-0-vcc-en {
|
||||
+ rockchip,pins = <1 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ sound {
|
||||
+ hp_detect: hp-detect {
|
||||
+ rockchip,pins = <1 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&usb_host2_xhci {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vcc3v3_pcie2x1l0 {
|
||||
+ gpios = <&gpio1 RK_PD2 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie2_0_vcc3v3_en>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
From 0ea651de9b79a17cbe410a69399877805c136b76 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Tue, 20 May 2025 20:50:11 +0200
|
||||
Subject: arm64: dts: rockchip: add ROCK 5T device tree
|
||||
|
||||
The RADXA ROCK 5T is a single board computer quite similar to the ROCK
|
||||
5B+, except it has one more PCIe-to-Ethernet controller (at the expense
|
||||
of a USB3 port) and a barrel jack for power input instead. Some pins are
|
||||
shuffled around as well.
|
||||
|
||||
Add a device tree for it.
|
||||
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250520-add-rock5t-v2-4-1f1971850a20@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/Makefile
|
||||
+++ b/arch/arm64/boot/dts/rockchip/Makefile
|
||||
@@ -143,6 +143,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-ro
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5b-pcie-ep.dtbo
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5b-pcie-srns.dtbo
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5b-plus.dtb
|
||||
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5t.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-tiger-haikou.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-toybrick-x0.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-turing-rk1.dtb
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5t.dts
|
||||
@@ -0,0 +1,105 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "rk3588-rock-5b-5bp-5t.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "Radxa ROCK 5T";
|
||||
+ compatible = "radxa,rock-5t", "rockchip,rk3588";
|
||||
+
|
||||
+ analog-sound {
|
||||
+ compatible = "audio-graph-card";
|
||||
+ label = "rk3588-es8316";
|
||||
+
|
||||
+ widgets = "Microphone", "Mic Jack",
|
||||
+ "Headphone", "Headphones";
|
||||
+
|
||||
+ routing = "MIC2", "Mic Jack",
|
||||
+ "Headphones", "HPOL",
|
||||
+ "Headphones", "HPOR";
|
||||
+
|
||||
+ dais = <&i2s0_8ch_p0>;
|
||||
+ hp-det-gpios = <&gpio4 RK_PC3 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&hp_detect>;
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&led_rgb_b>;
|
||||
+
|
||||
+ led_rgb_b {
|
||||
+ function = LED_FUNCTION_STATUS;
|
||||
+ color = <LED_COLOR_ID_BLUE>;
|
||||
+ gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
|
||||
+ linux,default-trigger = "heartbeat";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ rfkill {
|
||||
+ compatible = "rfkill-gpio";
|
||||
+ label = "rfkill-m2-wlan";
|
||||
+ radio-type = "wlan";
|
||||
+ shutdown-gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ vcc3v3_pcie2x1l1: regulator-vcc3v3-pcie2x1l2 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc3v3_pcie2x1l1";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ startup-delay-us = <5000>;
|
||||
+ vin-supply = <&vcc_3v3_s3>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdmi_receiver {
|
||||
+ hpd-gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_LOW>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pcie2x1l1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie2_1_rst>;
|
||||
+ reset-gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>;
|
||||
+ vpcie3v3-supply = <&vcc3v3_pcie2x1l1>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pinctrl {
|
||||
+ hdmirx {
|
||||
+ hdmirx_hpd: hdmirx-5v-detection {
|
||||
+ rockchip,pins = <2 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ led_rgb_b: led-rgb-b {
|
||||
+ rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pcie2 {
|
||||
+ pcie2_1_rst: pcie2-1-rst {
|
||||
+ rockchip,pins = <4 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ pcie2_0_vcc3v3_en: pcie2-0-vcc-en {
|
||||
+ rockchip,pins = <2 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ sound {
|
||||
+ hp_detect: hp-detect {
|
||||
+ rockchip,pins = <4 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&vcc3v3_pcie2x1l0 {
|
||||
+ gpios = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie2_0_vcc3v3_en>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Mon, 25 Aug 2025 09:27:08 +0200
|
||||
Subject: arm64: dts: rockchip: fix USB on RADXA ROCK 5T
|
||||
|
||||
The RADXA ROCK 5T board uses the same GPIO pin for controlling the USB
|
||||
host port regulator. This control pin was mistakenly left out of the
|
||||
ROCK 5T device tree.
|
||||
|
||||
Reported-by: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Closes: https://libera.catirclogs.org/linux-rockchip/2025-08-25#38609886;
|
||||
Fixes: 0ea651de9b79 ("arm64: dts: rockchip: add ROCK 5T device tree")
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5t.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5t.dts
|
||||
@@ -95,6 +95,12 @@
|
||||
rockchip,pins = <4 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
+
|
||||
+ usb {
|
||||
+ vcc5v0_host_en: vcc5v0-host-en {
|
||||
+ rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
};
|
||||
|
||||
&vcc3v3_pcie2x1l0 {
|
||||
@@ -103,3 +109,10 @@
|
||||
pinctrl-0 = <&pcie2_0_vcc3v3_en>;
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&vcc5v0_host {
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&vcc5v0_host_en>;
|
||||
+};
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Tue, 26 Aug 2025 10:08:36 +0200
|
||||
Subject: arm64: dts: rockchip: fix second M.2 slot on ROCK 5T
|
||||
|
||||
The Radxa ROCK 5T has two M.2 slots, much like the Radxa Rock 5B+. As it
|
||||
stands, the board won't be able to use PCIe3 if the second M.2 slot is
|
||||
in use.
|
||||
|
||||
Fix this by adding the necessary node enablement and data-lanes property
|
||||
to the ROCK 5T device tree, mirroring what's in the ROCK 5B+ device
|
||||
tree.
|
||||
|
||||
Reported-by: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Closes: https://libera.catirclogs.org/linux-rockchip/2025-08-25#38610630;
|
||||
Fixes: 0ea651de9b79 ("arm64: dts: rockchip: add ROCK 5T device tree")
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5t.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5t.dts
|
||||
@@ -68,6 +68,22 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&pcie30phy {
|
||||
+ data-lanes = <1 1 2 2>;
|
||||
+};
|
||||
+
|
||||
+&pcie3x2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie3x2_rst>;
|
||||
+ reset-gpios = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>;
|
||||
+ vpcie3v3-supply = <&vcc3v3_pcie30>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pcie3x4 {
|
||||
+ num-lanes = <2>;
|
||||
+};
|
||||
+
|
||||
&pinctrl {
|
||||
hdmirx {
|
||||
hdmirx_hpd: hdmirx-5v-detection {
|
||||
@@ -90,6 +106,12 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ pcie3 {
|
||||
+ pcie3x2_rst: pcie3x2-rst {
|
||||
+ rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
sound {
|
||||
hp_detect: hp-detect {
|
||||
rockchip,pins = <4 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
From 3ca743f8a5b568dc5e5d5f1bab0298a4a43c2360 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||
Date: Fri, 27 Sep 2024 14:42:22 +0200
|
||||
Subject: arm64: dts: rockchip: Switch to hp-det-gpios
|
||||
|
||||
Replace the deprecated "hp-det-gpio" property by "hp-det-gpios" in Audio
|
||||
Graph Card and Realtek RT5651 Audio Codec device nodes.
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||
Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
|
||||
Link: https://lore.kernel.org/r/717e7c9527139c3a3e5246dd367a3ad98c5c81b6.1727438777.git.geert+renesas@glider.be
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
|
||||
@@ -46,7 +46,7 @@
|
||||
compatible = "audio-graph-card";
|
||||
label = "rk3588-es8316";
|
||||
dais = <&i2s0_8ch_p0>;
|
||||
- hp-det-gpio = <&gpio1 RK_PD5 GPIO_ACTIVE_HIGH>;
|
||||
+ hp-det-gpios = <&gpio1 RK_PD5 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&hp_detect>;
|
||||
routing = "MIC2", "Mic Jack",
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
From e684f02492f99d6f6f037a35a613607339cf8e8f Mon Sep 17 00:00:00 2001
|
||||
From: Heiko Stuebner <heiko@sntech.de>
|
||||
Date: Fri, 6 Sep 2024 10:25:11 +0200
|
||||
Subject: arm64: dts: rockchip: fix the pcie refclock oscillator on Rock 5 ITX
|
||||
|
||||
The Rock 5 ITX uses two PCIe controllers to drive both a M.2 slot and its
|
||||
SATA controller with 2 lanes each. The supply for the refclk oscillator is
|
||||
the same that supplies the M.2 slot, but the SATA controller port is
|
||||
supplied by a different rail.
|
||||
|
||||
This leads to the effect that if the PCIe30x4 controller for the M.2
|
||||
probes first, everything works normally. But if the PCIe30x2 controller
|
||||
that is connected to the SATA controller probes first, it will hang on
|
||||
the first DBI read as nothing will have enabled the refclock before.
|
||||
|
||||
Fix this by describing the clock generator with its supplies so that
|
||||
both controllers can reference it as needed.
|
||||
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Link: https://lore.kernel.org/r/20240906082511.2963890-6-heiko@sntech.de
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
|
||||
@@ -72,6 +72,15 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ /* Unnamed gated oscillator: 100MHz,3.3V,3225 */
|
||||
+ pcie30_port0_refclk: pcie30_port1_refclk: pcie-oscillator {
|
||||
+ compatible = "gated-fixed-clock";
|
||||
+ #clock-cells = <0>;
|
||||
+ clock-frequency = <100000000>;
|
||||
+ clock-output-names = "pcie30_refclk";
|
||||
+ vdd-supply = <&vcc3v3_pi6c_05>;
|
||||
+ };
|
||||
+
|
||||
fan0: pwm-fan {
|
||||
compatible = "pwm-fan";
|
||||
#cooling-cells = <2>;
|
||||
@@ -146,13 +155,14 @@
|
||||
vin-supply = <&vcc_3v3_s3>;
|
||||
};
|
||||
|
||||
- vcc3v3_mkey: regulator-vcc3v3-mkey {
|
||||
+ /* The PCIE30x4_PWREN_H controls two regulators */
|
||||
+ vcc3v3_mkey: vcc3v3_pi6c_05: regulator-vcc3v3-pi6c-05 {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-high;
|
||||
gpios = <&gpio1 RK_PA4 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pcie30x4_pwren_h>;
|
||||
- regulator-name = "vcc3v3_mkey";
|
||||
+ regulator-name = "vcc3v3_pi6c_05";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
startup-delay-us = <5000>;
|
||||
@@ -513,6 +523,18 @@
|
||||
|
||||
/* ASMedia ASM1164 Sata controller */
|
||||
&pcie3x2 {
|
||||
+ /*
|
||||
+ * The board has a "pcie_refclk" oscillator that needs enabling,
|
||||
+ * so add it to the list of clocks.
|
||||
+ */
|
||||
+ clocks = <&cru ACLK_PCIE_2L_MSTR>, <&cru ACLK_PCIE_2L_SLV>,
|
||||
+ <&cru ACLK_PCIE_2L_DBI>, <&cru PCLK_PCIE_2L>,
|
||||
+ <&cru CLK_PCIE_AUX1>, <&cru CLK_PCIE2L_PIPE>,
|
||||
+ <&pcie30_port1_refclk>;
|
||||
+ clock-names = "aclk_mst", "aclk_slv",
|
||||
+ "aclk_dbi", "pclk",
|
||||
+ "aux", "pipe",
|
||||
+ "ref";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pcie30x2_perstn_m1_l>;
|
||||
reset-gpios = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>;
|
||||
@@ -522,6 +544,18 @@
|
||||
|
||||
/* M.2 M.key */
|
||||
&pcie3x4 {
|
||||
+ /*
|
||||
+ * The board has a "pcie_refclk" oscillator that needs enabling,
|
||||
+ * so add it to the list of clocks.
|
||||
+ */
|
||||
+ clocks = <&cru ACLK_PCIE_4L_MSTR>, <&cru ACLK_PCIE_4L_SLV>,
|
||||
+ <&cru ACLK_PCIE_4L_DBI>, <&cru PCLK_PCIE_4L>,
|
||||
+ <&cru CLK_PCIE_AUX0>, <&cru CLK_PCIE4L_PIPE>,
|
||||
+ <&pcie30_port0_refclk>;
|
||||
+ clock-names = "aclk_mst", "aclk_slv",
|
||||
+ "aclk_dbi", "pclk",
|
||||
+ "aux", "pipe",
|
||||
+ "ref";
|
||||
num-lanes = <2>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pcie30x4_perstn_m1_l>;
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
From b36402e4a0772d1b3da06a4f5fbd1cfe4d6f1cc0 Mon Sep 17 00:00:00 2001
|
||||
From: Jianfeng Liu <liujianfeng1994@gmail.com>
|
||||
Date: Fri, 28 Feb 2025 22:33:08 +0800
|
||||
Subject: arm64: dts: rockchip: slow down emmc freq for rock 5 itx
|
||||
|
||||
The current max-frequency 200000000 of emmc is not stable. When doing
|
||||
heavy write there will be I/O Error. After setting max-frequency to
|
||||
150000000 the emmc is stable under write.
|
||||
|
||||
Also remove property mmc-hs200-1_8v because we are already running at
|
||||
HS400 mode.
|
||||
|
||||
Tested with fio command:
|
||||
fio -filename=./test_randread -direct=1 -iodepth 1 -thread \
|
||||
-rw=randwrite -ioengine=psync -bs=16k -size=1G -numjobs=10 \
|
||||
-runtime=600 -group_reporting -name=mytest
|
||||
|
||||
Signed-off-by: Jianfeng Liu <liujianfeng1994@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20250228143341.70244-1-liujianfeng1994@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
|
||||
@@ -690,10 +690,9 @@
|
||||
|
||||
&sdhci {
|
||||
bus-width = <8>;
|
||||
- max-frequency = <200000000>;
|
||||
+ max-frequency = <150000000>;
|
||||
mmc-hs400-1_8v;
|
||||
mmc-hs400-enhanced-strobe;
|
||||
- mmc-hs200-1_8v;
|
||||
no-sdio;
|
||||
no-sd;
|
||||
non-removable;
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
From 3eac9319af62dbc56d1f06fcb240e4a092fa5b2f Mon Sep 17 00:00:00 2001
|
||||
From: Jianfeng Liu <liujianfeng1994@gmail.com>
|
||||
Date: Tue, 25 Feb 2025 11:08:48 +0800
|
||||
Subject: arm64: dts: rockchip: add hdmi1 support to ROCK 5 ITX
|
||||
|
||||
Enable the HDMI port next to ethernet port.
|
||||
|
||||
Signed-off-by: Jianfeng Liu <liujianfeng1994@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20250225030904.2813023-1-liujianfeng1994@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <dt-bindings/leds/common.h>
|
||||
#include <dt-bindings/pinctrl/rockchip.h>
|
||||
#include <dt-bindings/pwm/pwm.h>
|
||||
+#include <dt-bindings/soc/rockchip,vop2.h>
|
||||
#include "dt-bindings/usb/pd.h"
|
||||
#include "rk3588.dtsi"
|
||||
|
||||
@@ -72,6 +73,17 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ hdmi1-con {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ type = "a";
|
||||
+
|
||||
+ port {
|
||||
+ hdmi1_con_in: endpoint {
|
||||
+ remote-endpoint = <&hdmi1_out_con>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
/* Unnamed gated oscillator: 100MHz,3.3V,3225 */
|
||||
pcie30_port0_refclk: pcie30_port1_refclk: pcie-oscillator {
|
||||
compatible = "gated-fixed-clock";
|
||||
@@ -261,6 +273,28 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&hdmi1 {
|
||||
+ pinctrl-0 = <&hdmim0_tx1_cec &hdmim0_tx1_hpd
|
||||
+ &hdmim1_tx1_scl &hdmim1_tx1_sda>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi1_in {
|
||||
+ hdmi1_in_vp1: endpoint {
|
||||
+ remote-endpoint = <&vp1_out_hdmi1>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdmi1_out {
|
||||
+ hdmi1_out_con: endpoint {
|
||||
+ remote-endpoint = <&hdmi1_con_in>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdptxphy1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c0m2_xfer>;
|
||||
@@ -1208,3 +1242,18 @@
|
||||
rockchip,dp-lane-mux = <2 3>;
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&vop {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vop_mmu {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vp1 {
|
||||
+ vp1_out_hdmi1: endpoint@ROCKCHIP_VOP2_EP_HDMI1 {
|
||||
+ reg = <ROCKCHIP_VOP2_EP_HDMI1>;
|
||||
+ remote-endpoint = <&hdmi1_in_vp1>;
|
||||
+ };
|
||||
+};
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
From f94500eb7328b35f3d0927635b1aba26c85ea4b0 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Thu, 20 Feb 2025 19:58:11 +0100
|
||||
Subject: arm64: dts: rockchip: Add GPU power domain regulator dependency for
|
||||
RK3588
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Enabling the GPU power domain requires that the GPU regulator is
|
||||
enabled. The regulator is enabled at boot time, but gets disabled
|
||||
automatically when there are no users.
|
||||
|
||||
This means the system might run into a failure state hanging the
|
||||
whole system for the following use cases:
|
||||
|
||||
* if the GPU driver is being probed late (e.g. build as a
|
||||
module and firmware is not in initramfs), the regulator
|
||||
might already have been disabled. In that case the power
|
||||
domain is enabled before the regulator.
|
||||
* unbinding the GPU driver will disable the PM domain and
|
||||
the regulator. When the driver is bound again, the PM
|
||||
domain will be enabled before the regulator and error
|
||||
appears.
|
||||
|
||||
Avoid this by adding an explicit regulator dependency to the
|
||||
power domain.
|
||||
|
||||
Tested-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Reported-by: Adrián Martínez Larumbe <adrian.larumbe@collabora.com>
|
||||
Tested-by: Adrian Larumbe <adrian.larumbe@collabora.com> # On Rock 5B
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250220-rk3588-gpu-pwr-domain-regulator-v6-8-a4f9c24e5b81@kernel.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
|
||||
@@ -598,6 +598,10 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&pd_gpu {
|
||||
+ domain-supply = <&vdd_gpu_s0>;
|
||||
+};
|
||||
+
|
||||
&pinctrl {
|
||||
hym8563 {
|
||||
rtc_int: rtc-int {
|
||||
+957
@@ -0,0 +1,957 @@
|
||||
From 3ddf5cdb77e6efd6fe9b70f36dec935e324a3cd2 Mon Sep 17 00:00:00 2001
|
||||
From: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Date: Mon, 21 Oct 2024 09:05:47 +0000
|
||||
Subject: arm64: dts: rockchip: add Radxa ROCK 5C
|
||||
|
||||
Radxa ROCK 5C is a 8K computer for everything[1] using the Rockchip
|
||||
RK3588S2 chip:
|
||||
|
||||
- Rockchip RK3588S2
|
||||
- Quad A76 and Quad A55 CPU
|
||||
- 6 TOPS NPU
|
||||
- up to 32GB LPDDR4x RAM
|
||||
- eMMC / SPI flash connector
|
||||
- Micro SD Card slot
|
||||
- Gigabit ethernet port (supports PoE with add-on PoE HAT)
|
||||
- WiFi6 / BT5.4
|
||||
- 1x USB 3.0 Type-A HOST port
|
||||
- 1x USB 3.0 Type-A OTG port
|
||||
- 2x USB 2.0 Type-A HOST port
|
||||
- 1x USB Type-C 5V power port
|
||||
|
||||
[1] https://radxa.com/products/rock5/5c
|
||||
|
||||
Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Link: https://lore.kernel.org/r/20241021090548.1052-2-naoki@radxa.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/Makefile
|
||||
+++ b/arch/arm64/boot/dts/rockchip/Makefile
|
||||
@@ -156,3 +156,4 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-n
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-odroid-m2.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-orangepi-5.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-rock-5a.dtb
|
||||
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-rock-5c.dtb
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
|
||||
@@ -0,0 +1,920 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+/*
|
||||
+ * Copyright (c) 2024 Radxa Computer (Shenzhen) Co., Ltd.
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/leds/common.h>
|
||||
+#include <dt-bindings/pinctrl/rockchip.h>
|
||||
+#include <dt-bindings/soc/rockchip,vop2.h>
|
||||
+#include "rk3588s.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "Radxa ROCK 5C";
|
||||
+ compatible = "radxa,rock-5c", "rockchip,rk3588s";
|
||||
+
|
||||
+ aliases {
|
||||
+ ethernet0 = &gmac1;
|
||||
+ mmc0 = &sdhci;
|
||||
+ mmc1 = &sdmmc;
|
||||
+ };
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = "serial2:1500000n8";
|
||||
+ };
|
||||
+
|
||||
+ analog-sound {
|
||||
+ compatible = "audio-graph-card";
|
||||
+ label = "rk3588-es8316";
|
||||
+ dais = <&i2s0_8ch_p0>;
|
||||
+ routing = "MIC2", "Mic Jack",
|
||||
+ "Headphones", "HPOL",
|
||||
+ "Headphones", "HPOR";
|
||||
+ widgets = "Microphone", "Mic Jack",
|
||||
+ "Headphone", "Headphones";
|
||||
+ };
|
||||
+
|
||||
+ hdmi0-con {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ type = "a";
|
||||
+
|
||||
+ port {
|
||||
+ hdmi0_con_in: endpoint {
|
||||
+ remote-endpoint = <&hdmi0_out_con>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&led_pins>;
|
||||
+
|
||||
+ led-0 {
|
||||
+ color = <LED_COLOR_ID_GREEN>;
|
||||
+ default-state = "on";
|
||||
+ function = LED_FUNCTION_POWER;
|
||||
+ gpios = <&gpio3 RK_PC4 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ led-1 {
|
||||
+ color = <LED_COLOR_ID_BLUE>;
|
||||
+ default-state = "on";
|
||||
+ function = LED_FUNCTION_HEARTBEAT;
|
||||
+ gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
|
||||
+ linux,default-trigger = "heartbeat";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fan {
|
||||
+ compatible = "pwm-fan";
|
||||
+ #cooling-cells = <2>;
|
||||
+ cooling-levels = <0 64 128 192 255>;
|
||||
+ fan-supply = <&vcc_5v0>;
|
||||
+ pwms = <&pwm3 0 10000 0>;
|
||||
+ };
|
||||
+
|
||||
+ pcie2x1l2_3v3: regulator-pcie2x1l2-3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pow_en>;
|
||||
+ regulator-name = "pcie2x1l2_3v3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+ };
|
||||
+
|
||||
+ vcc5v_dcin: regulator-vcc5v-dcin {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc5v_dcin";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ };
|
||||
+
|
||||
+ vcc5v0_usb_host: regulator-vcc5v0-usb-host {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio4 RK_PB5 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&usb_host_pwren_h>;
|
||||
+ regulator-name = "vcc5v0_usb_host";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+ };
|
||||
+
|
||||
+ vcc5v0_usb_otg0: regulator-vcc5v0-usb-otg0 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&usb_otg_pwren_h>;
|
||||
+ regulator-name = "vcc5v0_usb_otg0";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+ };
|
||||
+
|
||||
+ vcc_1v1_nldo_s3: regulator-vcc-1v1-nldo-s3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc_1v1_nldo_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1100000>;
|
||||
+ regulator-max-microvolt = <1100000>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+ };
|
||||
+
|
||||
+ vcc_3v3_pmu: regulator-vcc-3v3-pmu {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc_3v3_pmu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ vin-supply = <&vcc_3v3_s3>;
|
||||
+ };
|
||||
+
|
||||
+ vcc_3v3_s0: regulator-vcc-3v3-s0 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc_3v3_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ vin-supply = <&vcc_1v8_s0>;
|
||||
+ };
|
||||
+
|
||||
+ vcc_5v0: regulator-vcc-5v0 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&vcc_5v0_pwren_h>;
|
||||
+ regulator-name = "vcc_5v0";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+ };
|
||||
+
|
||||
+ vcc_sysin: regulator-vcc-sysin {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc_sysin";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ vin-supply = <&vcc5v_dcin>;
|
||||
+ };
|
||||
+
|
||||
+ vcca: regulator-vcca {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcca";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <4000000>;
|
||||
+ regulator-max-microvolt = <4000000>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+ };
|
||||
+
|
||||
+ vdd_3v3: regulator-vdd-3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&usb_wifi_pwr>;
|
||||
+ regulator-name = "vdd_3v3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ vin-supply = <&vcc_3v3_s3>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&combphy0_ps {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&combphy2_psu {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&cpu_b0 {
|
||||
+ cpu-supply = <&vdd_cpu_big0_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_b1 {
|
||||
+ cpu-supply = <&vdd_cpu_big0_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_b2 {
|
||||
+ cpu-supply = <&vdd_cpu_big1_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_b3 {
|
||||
+ cpu-supply = <&vdd_cpu_big1_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_l0 {
|
||||
+ cpu-supply = <&vdd_cpu_lit_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_l1 {
|
||||
+ cpu-supply = <&vdd_cpu_lit_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_l2 {
|
||||
+ cpu-supply = <&vdd_cpu_lit_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_l3 {
|
||||
+ cpu-supply = <&vdd_cpu_lit_s0>;
|
||||
+};
|
||||
+
|
||||
+&gmac1 {
|
||||
+ phy-handle = <&rgmii_phy1>;
|
||||
+ phy-mode = "rgmii-id";
|
||||
+ phy-supply = <&vcc_3v3_s0>;
|
||||
+ pinctrl-0 = <&gmac1_miim
|
||||
+ &gmac1_tx_bus2
|
||||
+ &gmac1_rx_bus2
|
||||
+ &gmac1_rgmii_clk
|
||||
+ &gmac1_rgmii_bus
|
||||
+ &gmac1_clkinout>;
|
||||
+ pinctrl-names = "default";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&gpu {
|
||||
+ mali-supply = <&vdd_gpu_s0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&hdmim0_tx0_cec
|
||||
+ &hdmim1_tx0_hpd
|
||||
+ &hdmim0_tx0_scl
|
||||
+ &hdmim0_tx0_sda>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi0_in {
|
||||
+ hdmi0_in_vp0: endpoint {
|
||||
+ remote-endpoint = <&vp0_out_hdmi0>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdmi0_out {
|
||||
+ hdmi0_out_con: endpoint {
|
||||
+ remote-endpoint = <&hdmi0_con_in>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdptxphy_hdmi0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c0m2_xfer>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ vdd_cpu_big0_s0: regulator@42 {
|
||||
+ compatible = "rockchip,rk8602";
|
||||
+ reg = <0x42>;
|
||||
+ fcs,suspend-voltage-selector = <1>;
|
||||
+ regulator-name = "vdd_cpu_big0_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <1050000>;
|
||||
+ regulator-ramp-delay = <2300>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_cpu_big1_s0: regulator@43 {
|
||||
+ compatible = "rockchip,rk8603", "rockchip,rk8602";
|
||||
+ reg = <0x43>;
|
||||
+ fcs,suspend-voltage-selector = <1>;
|
||||
+ regulator-name = "vdd_cpu_big1_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <1050000>;
|
||||
+ regulator-ramp-delay = <2300>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ eeprom@50 {
|
||||
+ compatible = "belling,bl24c16a", "atmel,24c16";
|
||||
+ reg = <0x50>;
|
||||
+ pagesize = <16>;
|
||||
+ vcc-supply = <&vcc_3v3_pmu>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c2 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ vdd_npu_s0: regulator@42 {
|
||||
+ compatible = "rockchip,rk8602";
|
||||
+ reg = <0x42>;
|
||||
+ fcs,suspend-voltage-selector = <1>;
|
||||
+ regulator-name = "vdd_npu_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <950000>;
|
||||
+ regulator-ramp-delay = <2300>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c5 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c5m2_xfer>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ rtc@51 {
|
||||
+ compatible = "haoyu,hym8563";
|
||||
+ reg = <0x51>;
|
||||
+ #clock-cells = <0>;
|
||||
+ clock-output-names = "rtcic_32kout";
|
||||
+ interrupt-parent = <&gpio0>;
|
||||
+ interrupts = <RK_PB0 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&rtc_int_l>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c7 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ audio-codec@11 {
|
||||
+ compatible = "everest,es8316";
|
||||
+ reg = <0x11>;
|
||||
+ assigned-clocks = <&cru I2S0_8CH_MCLKOUT>;
|
||||
+ assigned-clock-rates = <12288000>;
|
||||
+ clocks = <&cru I2S0_8CH_MCLKOUT>;
|
||||
+ clock-names = "mclk";
|
||||
+ #sound-dai-cells = <0>;
|
||||
+
|
||||
+ port {
|
||||
+ es8316_p0_0: endpoint {
|
||||
+ remote-endpoint = <&i2s0_8ch_p0_0>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2s0_8ch {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2s0_lrck
|
||||
+ &i2s0_mclk
|
||||
+ &i2s0_sclk
|
||||
+ &i2s0_sdi0
|
||||
+ &i2s0_sdo0>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ i2s0_8ch_p0: port {
|
||||
+ i2s0_8ch_p0_0: endpoint {
|
||||
+ dai-format = "i2s";
|
||||
+ mclk-fs = <256>;
|
||||
+ remote-endpoint = <&es8316_p0_0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&mdio1 {
|
||||
+ rgmii_phy1: ethernet-phy@1 {
|
||||
+ compatible = "ethernet-phy-id001c.c916";
|
||||
+ reg = <1>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&gmac1_rstn>;
|
||||
+ reset-assert-us = <20000>;
|
||||
+ reset-deassert-us = <100000>;
|
||||
+ reset-gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pcie2x1l2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie20x1_2_perstn_m0>;
|
||||
+ reset-gpios = <&gpio3 RK_PD1 GPIO_ACTIVE_HIGH>;
|
||||
+ vpcie3v3-supply = <&pcie2x1l2_3v3>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pinctrl {
|
||||
+ leds {
|
||||
+ led_pins: led-pins {
|
||||
+ rockchip,pins = <3 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>,
|
||||
+ <3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ mdio {
|
||||
+ gmac1_rstn: gmac1-rstn {
|
||||
+ rockchip,pins = <3 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pcie {
|
||||
+ pcie20x1_2_perstn_m0: pcie20x1-2-perstn-m0 {
|
||||
+ rockchip,pins = <3 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ pow_en: pow-en {
|
||||
+ rockchip,pins = <0 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ rtc {
|
||||
+ rtc_int_l: rtc-int-l {
|
||||
+ rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ usb {
|
||||
+ usb_host_pwren_h: usb-host-pwren-h {
|
||||
+ rockchip,pins = <4 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ usb_otg_pwren_h: usb-otg-pwren-h {
|
||||
+ rockchip,pins = <0 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ usb_wifi_pwr: usb-wifi-pwr {
|
||||
+ rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ vcc_5v0_pwren_h: vcc-5v0-pwren-h {
|
||||
+ rockchip,pins = <4 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pwm3 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pwm3m1_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&saradc {
|
||||
+ vref-supply = <&vcca_1v8_s0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&sdhci {
|
||||
+ bus-width = <8>;
|
||||
+ mmc-hs400-1_8v;
|
||||
+ mmc-hs400-enhanced-strobe;
|
||||
+ no-sdio;
|
||||
+ no-sd;
|
||||
+ non-removable;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&sdmmc {
|
||||
+ bus-width = <4>;
|
||||
+ cap-mmc-highspeed;
|
||||
+ cap-sd-highspeed;
|
||||
+ disable-wp;
|
||||
+ no-sdio;
|
||||
+ no-mmc;
|
||||
+ sd-uhs-sdr104;
|
||||
+ vmmc-supply = <&vcc_3v3_s3>;
|
||||
+ vqmmc-supply = <&vccio_sd_s0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&sfc {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&fspim0_pins>;
|
||||
+
|
||||
+ flash@0 {
|
||||
+ compatible = "jedec,spi-nor";
|
||||
+ reg = <0>;
|
||||
+ spi-max-frequency = <104000000>;
|
||||
+ spi-rx-bus-width = <4>;
|
||||
+ spi-tx-bus-width = <1>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&spi2 {
|
||||
+ status = "okay";
|
||||
+ assigned-clocks = <&cru CLK_SPI2>;
|
||||
+ assigned-clock-rates = <200000000>;
|
||||
+ num-cs = <1>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&spi2m2_cs0 &spi2m2_pins>;
|
||||
+
|
||||
+ pmic@0 {
|
||||
+ compatible = "rockchip,rk806";
|
||||
+ reg = <0>;
|
||||
+ gpio-controller;
|
||||
+ #gpio-cells = <2>;
|
||||
+ interrupt-parent = <&gpio0>;
|
||||
+ interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pmic_pins>, <&rk806_dvs1_null>,
|
||||
+ <&rk806_dvs2_null>, <&rk806_dvs3_null>;
|
||||
+ spi-max-frequency = <1000000>;
|
||||
+ system-power-controller;
|
||||
+
|
||||
+ vcc1-supply = <&vcc_sysin>;
|
||||
+ vcc2-supply = <&vcc_sysin>;
|
||||
+ vcc3-supply = <&vcc_sysin>;
|
||||
+ vcc4-supply = <&vcc_sysin>;
|
||||
+ vcc5-supply = <&vcc_sysin>;
|
||||
+ vcc6-supply = <&vcc_sysin>;
|
||||
+ vcc7-supply = <&vcc_sysin>;
|
||||
+ vcc8-supply = <&vcc_sysin>;
|
||||
+ vcc9-supply = <&vcc_sysin>;
|
||||
+ vcc10-supply = <&vcc_sysin>;
|
||||
+ vcc11-supply = <&vcc_2v0_pldo_s3>;
|
||||
+ vcc12-supply = <&vcc_sysin>;
|
||||
+ vcc13-supply = <&vcc_1v1_nldo_s3>;
|
||||
+ vcc14-supply = <&vcc_1v1_nldo_s3>;
|
||||
+ vcca-supply = <&vcca>;
|
||||
+
|
||||
+ rk806_dvs1_null: dvs1-null-pins {
|
||||
+ pins = "gpio_pwrctrl1";
|
||||
+ function = "pin_fun0";
|
||||
+ };
|
||||
+
|
||||
+ rk806_dvs2_null: dvs2-null-pins {
|
||||
+ pins = "gpio_pwrctrl2";
|
||||
+ function = "pin_fun0";
|
||||
+ };
|
||||
+
|
||||
+ rk806_dvs3_null: dvs3-null-pins {
|
||||
+ pins = "gpio_pwrctrl3";
|
||||
+ function = "pin_fun0";
|
||||
+ };
|
||||
+
|
||||
+ regulators {
|
||||
+ vdd_gpu_s0: dcdc-reg1 {
|
||||
+ regulator-name = "vdd_gpu_s0";
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <950000>;
|
||||
+ regulator-ramp-delay = <12500>;
|
||||
+ regulator-enable-ramp-delay = <400>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_cpu_lit_s0: dcdc-reg2 {
|
||||
+ regulator-name = "vdd_cpu_lit_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <950000>;
|
||||
+ regulator-ramp-delay = <12500>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_logic_s0: dcdc-reg3 {
|
||||
+ regulator-name = "vdd_logic_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <675000>;
|
||||
+ regulator-max-microvolt = <750000>;
|
||||
+ regulator-ramp-delay = <12500>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <750000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_vdenc_s0: dcdc-reg4 {
|
||||
+ regulator-name = "vdd_vdenc_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <950000>;
|
||||
+ regulator-ramp-delay = <12500>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_ddr_s0: dcdc-reg5 {
|
||||
+ regulator-name = "vdd_ddr_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <675000>;
|
||||
+ regulator-max-microvolt = <900000>;
|
||||
+ regulator-ramp-delay = <12500>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ regulator-suspend-microvolt = <850000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd2_ddr_s3: dcdc-reg6 {
|
||||
+ regulator-name = "vdd2_ddr_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_2v0_pldo_s3: dcdc-reg7 {
|
||||
+ regulator-name = "vdd_2v0_pldo_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <2000000>;
|
||||
+ regulator-max-microvolt = <2000000>;
|
||||
+ regulator-ramp-delay = <12500>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <2000000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_3v3_s3: dcdc-reg8 {
|
||||
+ regulator-name = "vcc_3v3_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <3300000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vddq_ddr_s0: dcdc-reg9 {
|
||||
+ regulator-name = "vddq_ddr_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc1v8_pmu_ddr_s3: dcdc-reg10 {
|
||||
+ regulator-name = "vcc1v8_pmu_ddr_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_1v8_s0: pldo-reg1 {
|
||||
+ regulator-name = "vcc_1v8_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcca_1v8_s0: pldo-reg2 {
|
||||
+ regulator-name = "vcca_1v8_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda_1v2_s0: pldo-reg3 {
|
||||
+ regulator-name = "vdda_1v2_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1200000>;
|
||||
+ regulator-max-microvolt = <1200000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcca_3v3_s0: pldo-reg4 {
|
||||
+ regulator-name = "vcca_3v3_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <3300000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vccio_sd_s0: pldo-reg5 {
|
||||
+ regulator-name = "vccio_sd_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pldo6_s3: pldo-reg6 {
|
||||
+ regulator-name = "pldo6_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_0v75_s3: nldo-reg1 {
|
||||
+ regulator-name = "vdd_0v75_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <750000>;
|
||||
+ regulator-max-microvolt = <750000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <750000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda_ddr_pll_s0: nldo-reg2 {
|
||||
+ regulator-name = "vdda_ddr_pll_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <850000>;
|
||||
+ regulator-max-microvolt = <850000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <850000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda_0v75_s0: nldo-reg3 {
|
||||
+ regulator-name = "vdda_0v75_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <750000>;
|
||||
+ regulator-max-microvolt = <750000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda_0v85_s0: nldo-reg4 {
|
||||
+ regulator-name = "vdda_0v85_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <850000>;
|
||||
+ regulator-max-microvolt = <850000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_0v75_s0: nldo-reg5 {
|
||||
+ regulator-name = "vdd_0v75_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <750000>;
|
||||
+ regulator-max-microvolt = <750000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&tsadc {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&u2phy0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&u2phy0_otg {
|
||||
+ phy-supply = <&vcc5v0_usb_otg0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&u2phy2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&u2phy2_host {
|
||||
+ /* connected to USB hub, which is powered by vcc_5v0 */
|
||||
+ phy-supply = <&vcc_5v0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&u2phy3 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&u2phy3_host {
|
||||
+ phy-supply = <&vcc5v0_usb_host>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart2 {
|
||||
+ pinctrl-0 = <&uart2m0_xfer>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usbdp_phy0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_host0_ehci {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_host0_xhci {
|
||||
+ dr_mode = "host";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_host1_ehci {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_host1_ohci {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_host2_xhci {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vop_mmu {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vop {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vp0 {
|
||||
+ vp0_out_hdmi0: endpoint@ROCKCHIP_VOP2_EP_HDMI0 {
|
||||
+ reg = <ROCKCHIP_VOP2_EP_HDMI0>;
|
||||
+ remote-endpoint = <&hdmi0_in_vp0>;
|
||||
+ };
|
||||
+};
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
From 6ed35e6ff556626734c400fff5a636b38b91fe19 Mon Sep 17 00:00:00 2001
|
||||
From: Alexey Charkov <alchark@gmail.com>
|
||||
Date: Mon, 20 Jan 2025 23:22:46 +0400
|
||||
Subject: arm64: dts: rockchip: Add finer-grained PWM states for the fan on
|
||||
Rock 5C
|
||||
|
||||
Radxa Heatsink 6540B, which is the official cooling accessory for the
|
||||
Rock 5C board, includes a small 5V fan, which in my testing spins up
|
||||
reliably at a PWM setting of 24 (out of 255). It is also quite loud
|
||||
at the current minimum setting of 64, and noticeably less so at 24.
|
||||
|
||||
Introduce two intermediate PWM states at the lower end of the fan's
|
||||
operating range to enable better balance between noise and cooling.
|
||||
|
||||
Note further that, in my testing, having the fan run at 44 is enough
|
||||
to keep the system from thermal throttling with sustained 100% load
|
||||
on its 8 CPU cores (in 22C ambient temperature and no case)
|
||||
|
||||
Signed-off-by: Alexey Charkov <alchark@gmail.com>
|
||||
Acked-by: Dragan Simic <dsimic@manjaro.org>
|
||||
Link: https://lore.kernel.org/r/20250120-rock-5c-fan-v1-1-5fb8446c981b@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
|
||||
@@ -71,7 +71,7 @@
|
||||
fan {
|
||||
compatible = "pwm-fan";
|
||||
#cooling-cells = <2>;
|
||||
- cooling-levels = <0 64 128 192 255>;
|
||||
+ cooling-levels = <0 24 44 64 128 192 255>;
|
||||
fan-supply = <&vcc_5v0>;
|
||||
pwms = <&pwm3 0 10000 0>;
|
||||
};
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
From cd5681e63fb9887bd05d4ef59151d6a6b39c9d33 Mon Sep 17 00:00:00 2001
|
||||
From: Alexey Charkov <alchark@gmail.com>
|
||||
Date: Mon, 20 Jan 2025 23:22:47 +0400
|
||||
Subject: arm64: dts: rockchip: Enable automatic fan control on Radxa Rock 5C
|
||||
|
||||
Add the necessary cooling map to enable the kernel's thermal subsystem
|
||||
to manage the fan speed automatically depending on the overall SoC
|
||||
package temperature on Radxa Rock 5C
|
||||
|
||||
Signed-off-by: Alexey Charkov <alchark@gmail.com>
|
||||
Reviewed-by: Dragan Simic <dsimic@manjaro.org>
|
||||
Link: https://lore.kernel.org/r/20250120-rock-5c-fan-v1-2-5fb8446c981b@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
|
||||
@@ -68,7 +68,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
- fan {
|
||||
+ fan: fan {
|
||||
compatible = "pwm-fan";
|
||||
#cooling-cells = <2>;
|
||||
cooling-levels = <0 24 44 64 128 192 255>;
|
||||
@@ -417,6 +417,36 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&package_thermal {
|
||||
+ polling-delay = <1000>;
|
||||
+
|
||||
+ trips {
|
||||
+ package_fan0: package-fan0 {
|
||||
+ temperature = <55000>;
|
||||
+ hysteresis = <2000>;
|
||||
+ type = "active";
|
||||
+ };
|
||||
+
|
||||
+ package_fan1: package-fan1 {
|
||||
+ temperature = <65000>;
|
||||
+ hysteresis = <2000>;
|
||||
+ type = "active";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ cooling-maps {
|
||||
+ map0 {
|
||||
+ trip = <&package_fan0>;
|
||||
+ cooling-device = <&fan THERMAL_NO_LIMIT 1>;
|
||||
+ };
|
||||
+
|
||||
+ map1 {
|
||||
+ trip = <&package_fan1>;
|
||||
+ cooling-device = <&fan 2 THERMAL_NO_LIMIT>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
&pcie2x1l2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pcie20x1_2_perstn_m0>;
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
From 2efdb041019fd6c58abefba3eb6fdc4d659e576c Mon Sep 17 00:00:00 2001
|
||||
From: Damon Ding <damon.ding@rock-chips.com>
|
||||
Date: Thu, 6 Feb 2025 11:03:30 +0800
|
||||
Subject: arm64: dts: rockchip: Fix label name of hdptxphy for RK3588
|
||||
|
||||
The hdptxphy is a combo transmit-PHY for HDMI2.1 TMDS Link, FRL Link, DP
|
||||
and eDP Link. Therefore, it is better to name it hdptxphy0 other than
|
||||
hdptxphy_hdmi0, which will be referenced by both hdmi0 and edp0 nodes.
|
||||
|
||||
Signed-off-by: Damon Ding <damon.ding@rock-chips.com>
|
||||
Link: https://lore.kernel.org/r/20250206030330.680424-3-damon.ding@rock-chips.com
|
||||
[added armsom-sige7, where hdmi-support was added recently and also
|
||||
the hdptxphy0-as-dclk source I just added]
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
|
||||
@@ -278,7 +278,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
-&hdptxphy_hdmi0 {
|
||||
+&hdptxphy0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
From 52cababc9c1914ebf50929bfb9a67c8f74cd60ab Mon Sep 17 00:00:00 2001
|
||||
From: Alexey Charkov <alchark@gmail.com>
|
||||
Date: Tue, 4 Feb 2025 13:02:28 +0400
|
||||
Subject: arm64: dts: rockchip: switch Rock 5C to PMIC-based TSHUT reset
|
||||
|
||||
Radxa Rock 5C supports both CRU-based (default) and PMIC-based reset
|
||||
upon thermal runaway conditions. The former resets the SoC by internally
|
||||
poking the CRU from TSADC, while the latter power-cycles the whole board
|
||||
by pulling the PMIC reset line low in case of uncontrolled overheating.
|
||||
|
||||
Switch to a PMIC-based reset, as the more 'thorough' of the two.
|
||||
|
||||
Tested by temporarily setting rockchip,hw-tshut-temp to 65C to simulate
|
||||
overheating - this causes the board to reset when any of the on-chip
|
||||
temperature sensors surpasses the tshut temperature.
|
||||
|
||||
Requires Alexander's patch [1] fixing TSADC pinctrl assignment
|
||||
|
||||
[1] https://lore.kernel.org/r/20250130053849.4902-1-eagle.alexander923@gmail.com
|
||||
|
||||
Signed-off-by: Alexey Charkov <alchark@gmail.com>
|
||||
Reviewed-by: Dragan Simic <dsimic@manjaro.org>
|
||||
Link: https://lore.kernel.org/r/20250204-rock-5c-tshut-v1-1-33301e4eef64@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
|
||||
@@ -873,6 +873,8 @@
|
||||
};
|
||||
|
||||
&tsadc {
|
||||
+ rockchip,hw-tshut-mode = <1>; /* tshut mode 0:CRU 1:GPIO */
|
||||
+ rockchip,hw-tshut-polarity = <0>; /* tshut polarity 0:LOW 1:HIGH */
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
From f94500eb7328b35f3d0927635b1aba26c85ea4b0 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Thu, 20 Feb 2025 19:58:11 +0100
|
||||
Subject: arm64: dts: rockchip: Add GPU power domain regulator dependency for
|
||||
RK3588
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Enabling the GPU power domain requires that the GPU regulator is
|
||||
enabled. The regulator is enabled at boot time, but gets disabled
|
||||
automatically when there are no users.
|
||||
|
||||
This means the system might run into a failure state hanging the
|
||||
whole system for the following use cases:
|
||||
|
||||
* if the GPU driver is being probed late (e.g. build as a
|
||||
module and firmware is not in initramfs), the regulator
|
||||
might already have been disabled. In that case the power
|
||||
domain is enabled before the regulator.
|
||||
* unbinding the GPU driver will disable the PM domain and
|
||||
the regulator. When the driver is bound again, the PM
|
||||
domain will be enabled before the regulator and error
|
||||
appears.
|
||||
|
||||
Avoid this by adding an explicit regulator dependency to the
|
||||
power domain.
|
||||
|
||||
Tested-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Reported-by: Adrián Martínez Larumbe <adrian.larumbe@collabora.com>
|
||||
Tested-by: Adrian Larumbe <adrian.larumbe@collabora.com> # On Rock 5B
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250220-rk3588-gpu-pwr-domain-regulator-v6-8-a4f9c24e5b81@kernel.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
|
||||
@@ -455,6 +455,10 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&pd_gpu {
|
||||
+ domain-supply = <&vdd_gpu_s0>;
|
||||
+};
|
||||
+
|
||||
&pinctrl {
|
||||
leds {
|
||||
led_pins: led-pins {
|
||||
+780
@@ -0,0 +1,780 @@
|
||||
From 9be4171219b659a8f0fa0a7913af2c6ab20c714e Mon Sep 17 00:00:00 2001
|
||||
From: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Date: Thu, 26 Dec 2024 02:46:30 +0000
|
||||
Subject: arm64: dts: rockchip: Add Radxa E52C
|
||||
|
||||
Radxa E52C[1] is a compact network computer based on the Rockchip
|
||||
RK3582 SoC:
|
||||
|
||||
- Dual Cortex-A76 and quad Cortex-A55 CPU
|
||||
- 5TOPS NPU
|
||||
- 2GB/4GB/8GB LPDDR4 RAM
|
||||
- 16GB/32GB/64GB on-board eMMC
|
||||
- microSD card slot
|
||||
- USB 3.0 Type-A HOST port
|
||||
- USB Type-C debug port
|
||||
- USB Type-C power port (5V only)
|
||||
- 2x 2.5GbE ports
|
||||
|
||||
[1] https://radxa.com/products/network-computer/e52c
|
||||
|
||||
Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
|
||||
Link: https://lore.kernel.org/r/20241226024630.13702-3-naoki@radxa.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/Makefile
|
||||
+++ b/arch/arm64/boot/dts/rockchip/Makefile
|
||||
@@ -124,6 +124,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-ro
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-wolfvision-pf5.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-wolfvision-pf5-display-vz.dtbo
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-wolfvision-pf5-io-expander.dtbo
|
||||
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3582-radxa-e52c.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-armsom-sige7.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-coolpi-cm5-evb.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-coolpi-cm5-genbook.dtb
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3582-radxa-e52c.dts
|
||||
@@ -0,0 +1,743 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+/*
|
||||
+ * Copyright (c) 2024 Radxa Computer (Shenzhen) Co., Ltd.
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/input/input.h>
|
||||
+#include <dt-bindings/leds/common.h>
|
||||
+#include <dt-bindings/pinctrl/rockchip.h>
|
||||
+#include <dt-bindings/pwm/pwm.h>
|
||||
+#include "rk3588s.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "Radxa E52C";
|
||||
+ compatible = "radxa,e52c", "rockchip,rk3582", "rockchip,rk3588s";
|
||||
+
|
||||
+ aliases {
|
||||
+ mmc0 = &sdhci;
|
||||
+ mmc1 = &sdmmc;
|
||||
+ };
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = "serial2:1500000n8";
|
||||
+ };
|
||||
+
|
||||
+ keys-0 {
|
||||
+ compatible = "adc-keys";
|
||||
+ io-channels = <&saradc 0>;
|
||||
+ io-channel-names = "buttons";
|
||||
+ keyup-threshold-microvolt = <18000>;
|
||||
+ poll-interval = <100>;
|
||||
+
|
||||
+ button-0 {
|
||||
+ label = "Maskrom";
|
||||
+ linux,code = <KEY_VENDOR>;
|
||||
+ press-threshold-microvolt = <0>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ keys-1 {
|
||||
+ compatible = "gpio-keys";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&btn_0>;
|
||||
+
|
||||
+ button-1 {
|
||||
+ label = "User";
|
||||
+ gpios = <&gpio4 RK_PB3 GPIO_ACTIVE_LOW>;
|
||||
+ linux,code = <BTN_0>;
|
||||
+ wakeup-source;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ leds-0 {
|
||||
+ compatible = "gpio-leds";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&led_0>;
|
||||
+
|
||||
+ led-0 {
|
||||
+ color = <LED_COLOR_ID_GREEN>;
|
||||
+ default-state = "on";
|
||||
+ function = LED_FUNCTION_STATUS;
|
||||
+ gpios = <&gpio3 RK_PC4 GPIO_ACTIVE_HIGH>;
|
||||
+ linux,default-trigger = "heartbeat";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ leds-1 {
|
||||
+ compatible = "pwm-leds";
|
||||
+
|
||||
+ led-1 {
|
||||
+ color = <LED_COLOR_ID_GREEN>;
|
||||
+ default-state = "on";
|
||||
+ function = LED_FUNCTION_LAN;
|
||||
+ linux,default-trigger = "netdev";
|
||||
+ pwms = <&pwm14 0 1000000 PWM_POLARITY_INVERTED>;
|
||||
+ max-brightness = <255>;
|
||||
+ };
|
||||
+
|
||||
+ led-2 {
|
||||
+ color = <LED_COLOR_ID_GREEN>;
|
||||
+ default-state = "on";
|
||||
+ function = LED_FUNCTION_WAN;
|
||||
+ linux,default-trigger = "netdev";
|
||||
+ pwms = <&pwm11 0 1000000 PWM_POLARITY_INVERTED>;
|
||||
+ max-brightness = <255>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_1v1_nldo_s3: regulator-1v1 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc_1v1_nldo_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1100000>;
|
||||
+ regulator-max-microvolt = <1100000>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+ };
|
||||
+
|
||||
+ vcc_3v3_pmu: regulator-3v3-0 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc_3v3_pmu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ vin-supply = <&vcc_3v3_s3>;
|
||||
+ };
|
||||
+
|
||||
+ vcc_3v3_s0: regulator-3v3-1 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc_3v3_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ vin-supply = <&vcc_3v3_s3>;
|
||||
+ };
|
||||
+
|
||||
+ vcca: regulator-4v0 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcca";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <4000000>;
|
||||
+ regulator-max-microvolt = <4000000>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+ };
|
||||
+
|
||||
+ vcc5v0_usb_otg0: regulator-5v0-0 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&usb_otg_pwren_h>;
|
||||
+ regulator-name = "vcc5v0_usb_otg0";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+ };
|
||||
+
|
||||
+ vcc_5v0: regulator-5v0-1 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&vcc_5v0_pwren_h>;
|
||||
+ regulator-name = "vcc_5v0";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+ };
|
||||
+
|
||||
+ vcc_sysin: regulator-5v0-2 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc_sysin";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&combphy0_ps {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&combphy2_psu {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * In the Rockchip RK3582 SoC, some CPU cores end up disabled
|
||||
+ * and unused because they're marked in the efuses as defective.
|
||||
+ * The disabling in the DT is performed by the boot loader.
|
||||
+ */
|
||||
+&cpu_b0 {
|
||||
+ cpu-supply = <&vdd_cpu_big0_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_b1 {
|
||||
+ cpu-supply = <&vdd_cpu_big0_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_b2 {
|
||||
+ cpu-supply = <&vdd_cpu_big1_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_b3 {
|
||||
+ cpu-supply = <&vdd_cpu_big1_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_l0 {
|
||||
+ cpu-supply = <&vdd_cpu_lit_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_l1 {
|
||||
+ cpu-supply = <&vdd_cpu_lit_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_l2 {
|
||||
+ cpu-supply = <&vdd_cpu_lit_s0>;
|
||||
+};
|
||||
+
|
||||
+&cpu_l3 {
|
||||
+ cpu-supply = <&vdd_cpu_lit_s0>;
|
||||
+};
|
||||
+
|
||||
+&i2c0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c0m2_xfer>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ vdd_cpu_big0_s0: regulator@42 {
|
||||
+ compatible = "rockchip,rk8602";
|
||||
+ reg = <0x42>;
|
||||
+ fcs,suspend-voltage-selector = <1>;
|
||||
+ regulator-name = "vdd_cpu_big0_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <1050000>;
|
||||
+ regulator-ramp-delay = <2300>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_cpu_big1_s0: regulator@43 {
|
||||
+ compatible = "rockchip,rk8603", "rockchip,rk8602";
|
||||
+ reg = <0x43>;
|
||||
+ fcs,suspend-voltage-selector = <1>;
|
||||
+ regulator-name = "vdd_cpu_big1_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <1050000>;
|
||||
+ regulator-ramp-delay = <2300>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ eeprom@50 {
|
||||
+ compatible = "belling,bl24c16a", "atmel,24c16";
|
||||
+ reg = <0x50>;
|
||||
+ pagesize = <16>;
|
||||
+ vcc-supply = <&vcc_3v3_pmu>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c2 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ vdd_npu_s0: regulator@42 {
|
||||
+ compatible = "rockchip,rk8602";
|
||||
+ reg = <0x42>;
|
||||
+ fcs,suspend-voltage-selector = <1>;
|
||||
+ regulator-name = "vdd_npu_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <950000>;
|
||||
+ regulator-ramp-delay = <2300>;
|
||||
+ vin-supply = <&vcc_sysin>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c5 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c5m2_xfer>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ rtc@51 {
|
||||
+ compatible = "haoyu,hym8563";
|
||||
+ reg = <0x51>;
|
||||
+ #clock-cells = <0>;
|
||||
+ clock-output-names = "rtcic_32kout";
|
||||
+ interrupt-parent = <&gpio0>;
|
||||
+ interrupts = <RK_PB0 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&rtc_int_l>;
|
||||
+ wakeup-source;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pcie2x1l1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie20x1_1_perstn_m1>;
|
||||
+ reset-gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>;
|
||||
+ vpcie3v3-supply = <&vcc_3v3_s3>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pcie2x1l2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie20x1_2_perstn_m0>;
|
||||
+ reset-gpios = <&gpio3 RK_PD1 GPIO_ACTIVE_HIGH>;
|
||||
+ vpcie3v3-supply = <&vcc_3v3_s3>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pinctrl {
|
||||
+ keys {
|
||||
+ btn_0: button-0 {
|
||||
+ rockchip,pins = <4 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ led_0: led-0 {
|
||||
+ rockchip,pins = <3 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pcie {
|
||||
+ pcie20x1_1_perstn_m1: pcie-1 {
|
||||
+ rockchip,pins = <4 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ pcie20x1_2_perstn_m0: pcie-2 {
|
||||
+ rockchip,pins = <3 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ regulators {
|
||||
+ vcc_5v0_pwren_h: regulator-5v0-1 {
|
||||
+ rockchip,pins = <4 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ rtc {
|
||||
+ rtc_int_l: rtc-0 {
|
||||
+ rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ usb {
|
||||
+ usb_otg_pwren_h: regulator-5v0-0 {
|
||||
+ rockchip,pins = <0 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pwm11 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pwm11m1_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pwm14 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pwm14m1_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&saradc {
|
||||
+ vref-supply = <&vcca_1v8_s0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&sdhci {
|
||||
+ bus-width = <8>;
|
||||
+ cap-mmc-highspeed;
|
||||
+ mmc-hs400-1_8v;
|
||||
+ mmc-hs400-enhanced-strobe;
|
||||
+ no-sd;
|
||||
+ no-sdio;
|
||||
+ non-removable;
|
||||
+ vmmc-supply = <&vcc_3v3_s0>;
|
||||
+ vqmmc-supply = <&vcc_1v8_s3>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&sdmmc {
|
||||
+ bus-width = <4>;
|
||||
+ cap-mmc-highspeed;
|
||||
+ cap-sd-highspeed;
|
||||
+ cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
|
||||
+ disable-wp;
|
||||
+ no-sdio;
|
||||
+ sd-uhs-sdr104;
|
||||
+ vmmc-supply = <&vcc_3v3_s3>;
|
||||
+ vqmmc-supply = <&vccio_sd_s0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&spi2 {
|
||||
+ status = "okay";
|
||||
+ assigned-clocks = <&cru CLK_SPI2>;
|
||||
+ assigned-clock-rates = <200000000>;
|
||||
+ num-cs = <1>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&spi2m2_cs0 &spi2m2_pins>;
|
||||
+
|
||||
+ pmic@0 {
|
||||
+ compatible = "rockchip,rk806";
|
||||
+ reg = <0>;
|
||||
+ gpio-controller;
|
||||
+ #gpio-cells = <2>;
|
||||
+ interrupt-parent = <&gpio0>;
|
||||
+ interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pmic_pins>, <&rk806_dvs1_null>,
|
||||
+ <&rk806_dvs2_null>, <&rk806_dvs3_null>;
|
||||
+ spi-max-frequency = <1000000>;
|
||||
+ system-power-controller;
|
||||
+
|
||||
+ vcc1-supply = <&vcc_sysin>;
|
||||
+ vcc2-supply = <&vcc_sysin>;
|
||||
+ vcc3-supply = <&vcc_sysin>;
|
||||
+ vcc4-supply = <&vcc_sysin>;
|
||||
+ vcc5-supply = <&vcc_sysin>;
|
||||
+ vcc6-supply = <&vcc_sysin>;
|
||||
+ vcc7-supply = <&vcc_sysin>;
|
||||
+ vcc8-supply = <&vcc_sysin>;
|
||||
+ vcc9-supply = <&vcc_sysin>;
|
||||
+ vcc10-supply = <&vcc_sysin>;
|
||||
+ vcc11-supply = <&vcc_2v0_pldo_s3>;
|
||||
+ vcc12-supply = <&vcc_sysin>;
|
||||
+ vcc13-supply = <&vcc_1v1_nldo_s3>;
|
||||
+ vcc14-supply = <&vcc_1v1_nldo_s3>;
|
||||
+ vcca-supply = <&vcca>;
|
||||
+
|
||||
+ rk806_dvs1_null: dvs1-null-pins {
|
||||
+ pins = "gpio_pwrctrl1";
|
||||
+ function = "pin_fun0";
|
||||
+ };
|
||||
+
|
||||
+ rk806_dvs2_null: dvs2-null-pins {
|
||||
+ pins = "gpio_pwrctrl2";
|
||||
+ function = "pin_fun0";
|
||||
+ };
|
||||
+
|
||||
+ rk806_dvs3_null: dvs3-null-pins {
|
||||
+ pins = "gpio_pwrctrl3";
|
||||
+ function = "pin_fun0";
|
||||
+ };
|
||||
+
|
||||
+ regulators {
|
||||
+ vdd_gpu_s0: dcdc-reg1 {
|
||||
+ regulator-name = "vdd_gpu_s0";
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <950000>;
|
||||
+ regulator-ramp-delay = <12500>;
|
||||
+ regulator-enable-ramp-delay = <400>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_cpu_lit_s0: dcdc-reg2 {
|
||||
+ regulator-name = "vdd_cpu_lit_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <950000>;
|
||||
+ regulator-ramp-delay = <12500>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_logic_s0: dcdc-reg3 {
|
||||
+ regulator-name = "vdd_logic_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <675000>;
|
||||
+ regulator-max-microvolt = <750000>;
|
||||
+ regulator-ramp-delay = <12500>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <750000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_vdenc_s0: dcdc-reg4 {
|
||||
+ regulator-name = "vdd_vdenc_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <550000>;
|
||||
+ regulator-max-microvolt = <950000>;
|
||||
+ regulator-ramp-delay = <12500>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_ddr_s0: dcdc-reg5 {
|
||||
+ regulator-name = "vdd_ddr_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <675000>;
|
||||
+ regulator-max-microvolt = <900000>;
|
||||
+ regulator-ramp-delay = <12500>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ regulator-suspend-microvolt = <850000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd2_ddr_s3: dcdc-reg6 {
|
||||
+ regulator-name = "vdd2_ddr_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_2v0_pldo_s3: dcdc-reg7 {
|
||||
+ regulator-name = "vcc_2v0_pldo_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <2000000>;
|
||||
+ regulator-max-microvolt = <2000000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <2000000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_3v3_s3: dcdc-reg8 {
|
||||
+ regulator-name = "vcc_3v3_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <3300000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vddq_ddr_s0: dcdc-reg9 {
|
||||
+ regulator-name = "vddq_ddr_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_1v8_s3: dcdc-reg10 {
|
||||
+ regulator-name = "vcc_1v8_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_1v8_s0: pldo-reg1 {
|
||||
+ regulator-name = "vcc_1v8_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcca_1v8_s0: pldo-reg2 {
|
||||
+ regulator-name = "vcca_1v8_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda_1v2_s0: pldo-reg3 {
|
||||
+ regulator-name = "vdda_1v2_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1200000>;
|
||||
+ regulator-max-microvolt = <1200000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcca_3v3_s0: pldo-reg4 {
|
||||
+ regulator-name = "vcca_3v3_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <3300000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vccio_sd_s0: pldo-reg5 {
|
||||
+ regulator-name = "vccio_sd_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pldo6_s3: pldo-reg6 {
|
||||
+ regulator-name = "pldo6_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_0v75_s3: nldo-reg1 {
|
||||
+ regulator-name = "vdd_0v75_s3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <750000>;
|
||||
+ regulator-max-microvolt = <750000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <750000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda_ddr_pll_s0: nldo-reg2 {
|
||||
+ regulator-name = "vdda_ddr_pll_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <850000>;
|
||||
+ regulator-max-microvolt = <850000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <850000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda_0v75_s0: nldo-reg3 {
|
||||
+ regulator-name = "vdda_0v75_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <750000>;
|
||||
+ regulator-max-microvolt = <750000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <750000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda_0v85_s0: nldo-reg4 {
|
||||
+ regulator-name = "vdda_0v85_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <850000>;
|
||||
+ regulator-max-microvolt = <850000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_0v75_s0: nldo-reg5 {
|
||||
+ regulator-name = "vdd_0v75_s0";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <750000>;
|
||||
+ regulator-max-microvolt = <750000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&tsadc {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&u2phy0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&u2phy0_otg {
|
||||
+ phy-supply = <&vcc5v0_usb_otg0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart2 {
|
||||
+ pinctrl-0 = <&uart2m0_xfer>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_host0_xhci {
|
||||
+ dr_mode = "host";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usbdp_phy0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+596
@@ -0,0 +1,596 @@
|
||||
From 50decd493c8394c52d04561fe4ede34df27a46ba Mon Sep 17 00:00:00 2001
|
||||
From: Tianling Shen <cnsztl@gmail.com>
|
||||
Date: Mon, 21 Oct 2024 01:39:46 +0800
|
||||
Subject: [PATCH] arm64: dts: rockchip: Add FriendlyARM NanoPi R3S board
|
||||
|
||||
The NanoPi R3S(as "R3S") is an open source platform with dual-Gbps
|
||||
Ethernet ports designed and developed by FriendlyElec for IoT
|
||||
applications.
|
||||
|
||||
Specification:
|
||||
- Rockchip RK3566
|
||||
- 2GB LPDDR4X RAM
|
||||
- optional 32GB eMMC module
|
||||
- SD card slot
|
||||
- 2x 1000 Base-T
|
||||
- 3x LEDs (POWER, LAN, WAN)
|
||||
- 2x Buttons (Reset, MaskROM)
|
||||
- 1x USB 3.0 Port
|
||||
- Type-C 5V 2A Power
|
||||
|
||||
Signed-off-by: Tianling Shen <cnsztl@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20241020173946.225960-2-cnsztl@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/Makefile | 1 +
|
||||
.../boot/dts/rockchip/rk3566-nanopi-r3s.dts | 554 ++++++++++++++++++
|
||||
2 files changed, 555 insertions(+)
|
||||
create mode 100644 arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/Makefile
|
||||
+++ b/arch/arm64/boot/dts/rockchip/Makefile
|
||||
@@ -83,6 +83,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-an
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-anbernic-rg353v.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-anbernic-rg353vs.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-anbernic-rg503.dtb
|
||||
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-nanopi-r3s.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-odroid-m1s.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-orangepi-3b-v1.1.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-orangepi-3b-v2.1.dtb
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
@@ -0,0 +1,554 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
+/*
|
||||
+ * Copyright (c) 2020 Rockchip Electronics Co., Ltd.
|
||||
+ *
|
||||
+ * Copyright (c) 2024 FriendlyElec Computer Tech. Co., Ltd.
|
||||
+ * (http://www.friendlyarm.com)
|
||||
+ *
|
||||
+ * Copyright (c) 2024 Tianling Shen <cnsztl@gmail.com>
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/input/input.h>
|
||||
+#include <dt-bindings/leds/common.h>
|
||||
+#include <dt-bindings/pinctrl/rockchip.h>
|
||||
+#include <dt-bindings/soc/rockchip,vop2.h>
|
||||
+#include "rk3566.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "FriendlyARM NanoPi R3S";
|
||||
+ compatible = "friendlyarm,nanopi-r3s", "rockchip,rk3566";
|
||||
+
|
||||
+ aliases {
|
||||
+ ethernet0 = &gmac1;
|
||||
+ mmc0 = &sdmmc0;
|
||||
+ mmc1 = &sdhci;
|
||||
+ };
|
||||
+
|
||||
+ chosen: chosen {
|
||||
+ stdout-path = "serial2:1500000n8";
|
||||
+ };
|
||||
+
|
||||
+ gpio-keys {
|
||||
+ compatible = "gpio-keys";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&reset_button_pin>;
|
||||
+
|
||||
+ button-reset {
|
||||
+ label = "reset";
|
||||
+ gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_LOW>;
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
+ debounce-interval = <50>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ gpio-leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&power_led_pin>, <&lan_led_pin>, <&wan_led_pin>;
|
||||
+
|
||||
+ power_led: led-0 {
|
||||
+ color = <LED_COLOR_ID_RED>;
|
||||
+ function = LED_FUNCTION_POWER;
|
||||
+ gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>;
|
||||
+ default-state = "on";
|
||||
+ };
|
||||
+
|
||||
+ lan_led: led-1 {
|
||||
+ color = <LED_COLOR_ID_GREEN>;
|
||||
+ function = LED_FUNCTION_LAN;
|
||||
+ gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ wan_led: led-2 {
|
||||
+ color = <LED_COLOR_ID_GREEN>;
|
||||
+ function = LED_FUNCTION_WAN;
|
||||
+ gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc3v3_sys: regulator-vcc3v3-sys {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc3v3_sys";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ vin-supply = <&vcc5v0_sys>;
|
||||
+ };
|
||||
+
|
||||
+ vcc5v0_sys: regulator-vcc5v0-sys {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc5v0_sys";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ vin-supply = <&vdd_usbc>;
|
||||
+ };
|
||||
+
|
||||
+ vcc5v0_usb: regulator-vcc5v0_usb {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&vcc5v0_usb_host_en>;
|
||||
+ regulator-name = "vcc5v0_usb";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ vin-supply = <&vcc5v0_sys>;
|
||||
+ };
|
||||
+
|
||||
+ vdd_usbc: regulator-vdd-usbc {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vdd_usbc";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&combphy1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&combphy2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&cpu0 {
|
||||
+ cpu-supply = <&vdd_cpu>;
|
||||
+};
|
||||
+
|
||||
+&cpu1 {
|
||||
+ cpu-supply = <&vdd_cpu>;
|
||||
+};
|
||||
+
|
||||
+&cpu2 {
|
||||
+ cpu-supply = <&vdd_cpu>;
|
||||
+};
|
||||
+
|
||||
+&cpu3 {
|
||||
+ cpu-supply = <&vdd_cpu>;
|
||||
+};
|
||||
+
|
||||
+&gmac1 {
|
||||
+ assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
|
||||
+ assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&cru CLK_MAC1_2TOP>;
|
||||
+ assigned-clock-rates = <0>, <125000000>;
|
||||
+ clock_in_out = "output";
|
||||
+ phy-mode = "rgmii-id";
|
||||
+ phy-handle = <&rgmii_phy1>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&gmac1m0_miim
|
||||
+ &gmac1m0_tx_bus2_level3
|
||||
+ &gmac1m0_rx_bus2
|
||||
+ &gmac1m0_rgmii_clk_level2
|
||||
+ &gmac1m0_rgmii_bus_level3>;
|
||||
+ snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>;
|
||||
+ snps,reset-active-low;
|
||||
+ /* Reset time is 20ms, 100ms for rtl8211f */
|
||||
+ snps,reset-delays-us = <0 20000 100000>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&gpu {
|
||||
+ mali-supply = <&vdd_gpu>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c0 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ vdd_cpu: regulator@1c {
|
||||
+ compatible = "tcs,tcs4525";
|
||||
+ reg = <0x1c>;
|
||||
+ fcs,suspend-voltage-selector = <1>;
|
||||
+ regulator-name = "vdd_cpu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <800000>;
|
||||
+ regulator-max-microvolt = <1150000>;
|
||||
+ regulator-ramp-delay = <2300>;
|
||||
+ vin-supply = <&vcc5v0_sys>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ rk809: pmic@20 {
|
||||
+ compatible = "rockchip,rk809";
|
||||
+ reg = <0x20>;
|
||||
+ interrupt-parent = <&gpio0>;
|
||||
+ interrupts = <RK_PA3 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ #clock-cells = <1>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pmic_int>;
|
||||
+ system-power-controller;
|
||||
+ vcc1-supply = <&vcc3v3_sys>;
|
||||
+ vcc2-supply = <&vcc3v3_sys>;
|
||||
+ vcc3-supply = <&vcc3v3_sys>;
|
||||
+ vcc4-supply = <&vcc3v3_sys>;
|
||||
+ vcc5-supply = <&vcc3v3_sys>;
|
||||
+ vcc6-supply = <&vcc3v3_sys>;
|
||||
+ vcc7-supply = <&vcc3v3_sys>;
|
||||
+ vcc8-supply = <&vcc3v3_sys>;
|
||||
+ vcc9-supply = <&vcc3v3_sys>;
|
||||
+ wakeup-source;
|
||||
+
|
||||
+ regulators {
|
||||
+ vdd_logic: DCDC_REG1 {
|
||||
+ regulator-name = "vdd_logic";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-initial-mode = <0x2>;
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <1350000>;
|
||||
+ regulator-ramp-delay = <6001>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_gpu: DCDC_REG2 {
|
||||
+ regulator-name = "vdd_gpu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-initial-mode = <0x2>;
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <1350000>;
|
||||
+ regulator-ramp-delay = <6001>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_ddr: DCDC_REG3 {
|
||||
+ regulator-name = "vcc_ddr";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-initial-mode = <0x2>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_npu: DCDC_REG4 {
|
||||
+ regulator-name = "vdd_npu";
|
||||
+ regulator-initial-mode = <0x2>;
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <1350000>;
|
||||
+ regulator-ramp-delay = <6001>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_1v8: DCDC_REG5 {
|
||||
+ regulator-name = "vcc_1v8";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda0v9_image: LDO_REG1 {
|
||||
+ regulator-name = "vdda0v9_image";
|
||||
+ regulator-min-microvolt = <950000>;
|
||||
+ regulator-max-microvolt = <950000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda_0v9: LDO_REG2 {
|
||||
+ regulator-name = "vdda_0v9";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <900000>;
|
||||
+ regulator-max-microvolt = <900000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda0v9_pmu: LDO_REG3 {
|
||||
+ regulator-name = "vdda0v9_pmu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <900000>;
|
||||
+ regulator-max-microvolt = <900000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <900000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vccio_acodec: LDO_REG4 {
|
||||
+ regulator-name = "vccio_acodec";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vccio_sd: LDO_REG5 {
|
||||
+ regulator-name = "vccio_sd";
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc3v3_pmu: LDO_REG6 {
|
||||
+ regulator-name = "vcc3v3_pmu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <3300000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcca_1v8: LDO_REG7 {
|
||||
+ regulator-name = "vcca_1v8";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcca1v8_pmu: LDO_REG8 {
|
||||
+ regulator-name = "vcca1v8_pmu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcca1v8_image: LDO_REG9 {
|
||||
+ regulator-name = "vcca1v8_image";
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_3v3: SWITCH_REG1 {
|
||||
+ regulator-name = "vcc_3v3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc3v3_sd: SWITCH_REG2 {
|
||||
+ regulator-name = "vcc3v3_sd";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c1 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ hym8563: rtc@51 {
|
||||
+ compatible = "haoyu,hym8563";
|
||||
+ reg = <0x51>;
|
||||
+ #clock-cells = <0>;
|
||||
+ clock-output-names = "hym8563";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&hym8563_int>;
|
||||
+ interrupt-parent = <&gpio0>;
|
||||
+ interrupts = <RK_PD3 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ wakeup-source;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&mdio1 {
|
||||
+ rgmii_phy1: ethernet-phy@1 {
|
||||
+ compatible = "ethernet-phy-ieee802.3-c22";
|
||||
+ reg = <1>;
|
||||
+ interrupt-parent = <&gpio4>;
|
||||
+ interrupts = <RK_PC3 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <ð_phy_reset_pin>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pcie2x1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie_reset_h>;
|
||||
+ reset-gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pinctrl {
|
||||
+ gpio-leds {
|
||||
+ lan_led_pin: lan-led-pin {
|
||||
+ rockchip,pins = <3 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ power_led_pin: power-led-pin {
|
||||
+ rockchip,pins = <0 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
+ wan_led_pin: wan-led-pin {
|
||||
+ rockchip,pins = <3 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ gmac {
|
||||
+ eth_phy_reset_pin: eth-phy-reset-pin {
|
||||
+ rockchip,pins = <4 RK_PC2 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pcie {
|
||||
+ pcie_reset_h: pcie-reset-h {
|
||||
+ rockchip,pins = <4 RK_PC6 RK_FUNC_GPIO &pcfg_pull_down>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pmic {
|
||||
+ pmic_int: pmic-int {
|
||||
+ rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ rockchip-key {
|
||||
+ reset_button_pin: reset-button-pin {
|
||||
+ rockchip,pins = <0 RK_PC2 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ rtc {
|
||||
+ hym8563_int: hym8563-int {
|
||||
+ rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ usb {
|
||||
+ vcc5v0_usb_host_en: vcc5v0-usb-host-en {
|
||||
+ rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pmu_io_domains {
|
||||
+ status = "okay";
|
||||
+ pmuio1-supply = <&vcc3v3_pmu>;
|
||||
+ pmuio2-supply = <&vcc3v3_pmu>;
|
||||
+ vccio1-supply = <&vccio_acodec>;
|
||||
+ vccio2-supply = <&vcc_1v8>;
|
||||
+ vccio3-supply = <&vccio_sd>;
|
||||
+ vccio4-supply = <&vcc_3v3>;
|
||||
+ vccio5-supply = <&vcc_1v8>;
|
||||
+ vccio6-supply = <&vcc_3v3>;
|
||||
+ vccio7-supply = <&vcc_3v3>;
|
||||
+};
|
||||
+
|
||||
+&sdhci {
|
||||
+ bus-width = <8>;
|
||||
+ max-frequency = <200000000>;
|
||||
+ non-removable;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd &emmc_datastrobe>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&sdmmc0 {
|
||||
+ bus-width = <4>;
|
||||
+ cap-mmc-highspeed;
|
||||
+ cap-sd-highspeed;
|
||||
+ disable-wp;
|
||||
+ no-sdio;
|
||||
+ no-mmc;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
|
||||
+ sd-uhs-sdr50;
|
||||
+ vmmc-supply = <&vcc3v3_sd>;
|
||||
+ vqmmc-supply = <&vccio_sd>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&tsadc {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2phy0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2phy0_host {
|
||||
+ phy-supply = <&vcc5v0_usb>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2phy0_otg {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_host0_xhci {
|
||||
+ extcon = <&usb2phy0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_host1_xhci {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vop {
|
||||
+ assigned-clocks = <&cru DCLK_VOP0>, <&cru DCLK_VOP1>;
|
||||
+ assigned-clock-parents = <&pmucru PLL_HPLL>, <&cru PLL_VPLL>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vop_mmu {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
From b5bf84206a5c77528f9dd4cbca4e72caa063c102 Mon Sep 17 00:00:00 2001
|
||||
From: Tianling Shen <cnsztl@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 03:35:26 +0800
|
||||
Subject: [PATCH] arm64: dts: rockchip: fix model name for FriendlyElec NanoPi
|
||||
R3S
|
||||
|
||||
Use the marketing name for model name, this matches the dt-binding.
|
||||
Also update the website url in copyright.
|
||||
|
||||
Fixes: 50decd493c83 ("arm64: dts: rockchip: Add FriendlyARM NanoPi R3S board")
|
||||
Suggested-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Signed-off-by: Tianling Shen <cnsztl@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20241022193537.1117919-2-cnsztl@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
@@ -3,7 +3,7 @@
|
||||
* Copyright (c) 2020 Rockchip Electronics Co., Ltd.
|
||||
*
|
||||
* Copyright (c) 2024 FriendlyElec Computer Tech. Co., Ltd.
|
||||
- * (http://www.friendlyarm.com)
|
||||
+ * (http://www.friendlyelec.com)
|
||||
*
|
||||
* Copyright (c) 2024 Tianling Shen <cnsztl@gmail.com>
|
||||
*/
|
||||
@@ -17,7 +17,7 @@
|
||||
#include "rk3566.dtsi"
|
||||
|
||||
/ {
|
||||
- model = "FriendlyARM NanoPi R3S";
|
||||
+ model = "FriendlyElec NanoPi R3S";
|
||||
compatible = "friendlyarm,nanopi-r3s", "rockchip,rk3566";
|
||||
|
||||
aliases {
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
From 82b2868937883b65732da498b26366d34db61510 Mon Sep 17 00:00:00 2001
|
||||
From: Tianling Shen <cnsztl@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 03:35:27 +0800
|
||||
Subject: [PATCH] arm64: dts: rockchip: replace deprecated snps,reset props for
|
||||
NanoPi R3S
|
||||
|
||||
Replace deprecated snps,reset props and move them to the PHY node.
|
||||
|
||||
Fixes: 50decd493c83 ("arm64: dts: rockchip: Add FriendlyARM NanoPi R3S board")
|
||||
Suggested-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Signed-off-by: Tianling Shen <cnsztl@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20241022193537.1117919-3-cnsztl@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts | 7 +++----
|
||||
1 file changed, 3 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
@@ -149,10 +149,6 @@
|
||||
&gmac1m0_rx_bus2
|
||||
&gmac1m0_rgmii_clk_level2
|
||||
&gmac1m0_rgmii_bus_level3>;
|
||||
- snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>;
|
||||
- snps,reset-active-low;
|
||||
- /* Reset time is 20ms, 100ms for rtl8211f */
|
||||
- snps,reset-delays-us = <0 20000 100000>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -414,6 +410,9 @@
|
||||
interrupts = <RK_PC3 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <ð_phy_reset_pin>;
|
||||
+ reset-assert-us = <20000>;
|
||||
+ reset-deassert-us = <100000>;
|
||||
+ reset-gpios = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
From 17e150fdd983c7e59b9240e34a166285f3c3fb39 Mon Sep 17 00:00:00 2001
|
||||
From: Tianling Shen <cnsztl@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 03:35:28 +0800
|
||||
Subject: [PATCH] arm64: dts: rockchip: sort props in pmu_io_domains node for
|
||||
NanoPi R3S
|
||||
|
||||
The status prop is typically the last prop.
|
||||
|
||||
Fixes: 50decd493c83 ("arm64: dts: rockchip: Add FriendlyARM NanoPi R3S board")
|
||||
Suggested-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Signed-off-by: Tianling Shen <cnsztl@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20241022193537.1117919-4-cnsztl@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
@@ -476,7 +476,6 @@
|
||||
};
|
||||
|
||||
&pmu_io_domains {
|
||||
- status = "okay";
|
||||
pmuio1-supply = <&vcc3v3_pmu>;
|
||||
pmuio2-supply = <&vcc3v3_pmu>;
|
||||
vccio1-supply = <&vccio_acodec>;
|
||||
@@ -486,6 +485,7 @@
|
||||
vccio5-supply = <&vcc_1v8>;
|
||||
vccio6-supply = <&vcc_3v3>;
|
||||
vccio7-supply = <&vcc_3v3>;
|
||||
+ status = "okay";
|
||||
};
|
||||
|
||||
&sdhci {
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
From 1b5365034410f1ca21adadadd492b99bdf4f2c55 Mon Sep 17 00:00:00 2001
|
||||
From: Tianling Shen <cnsztl@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 03:35:29 +0800
|
||||
Subject: [PATCH] arm64: dts: rockchip: enable eMMC HS200 mode for NanoPi R3S
|
||||
|
||||
It is required to boot from eMMC without additional patch in u-boot.
|
||||
|
||||
Fixes: 50decd493c83 ("arm64: dts: rockchip: Add FriendlyARM NanoPi R3S board")
|
||||
Suggested-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Signed-off-by: Tianling Shen <cnsztl@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20241022193537.1117919-5-cnsztl@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
@@ -491,6 +491,7 @@
|
||||
&sdhci {
|
||||
bus-width = <8>;
|
||||
max-frequency = <200000000>;
|
||||
+ mmc-hs200-1_8v;
|
||||
non-removable;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd &emmc_datastrobe>;
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
From b7cd1115456d312f8c5e60c80fdc35fd35ea6eab Mon Sep 17 00:00:00 2001
|
||||
From: Tianling Shen <cnsztl@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 03:35:30 +0800
|
||||
Subject: [PATCH] arm64: dts: rockchip: reorder mmc aliases for NanoPi R3S
|
||||
|
||||
Typically any non-removable storage (emmc) is listed before removable
|
||||
storage (sd-card) options. Also U-Boot will try to override and use
|
||||
mmc0=sdhci and mmc1=sdmmc0 for all rk356x boards.
|
||||
|
||||
Fixes: 50decd493c83 ("arm64: dts: rockchip: Add FriendlyARM NanoPi R3S board")
|
||||
Suggested-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Signed-off-by: Tianling Shen <cnsztl@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20241022193537.1117919-6-cnsztl@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3566-nanopi-r3s.dts
|
||||
@@ -22,8 +22,8 @@
|
||||
|
||||
aliases {
|
||||
ethernet0 = &gmac1;
|
||||
- mmc0 = &sdmmc0;
|
||||
- mmc1 = &sdhci;
|
||||
+ mmc0 = &sdhci;
|
||||
+ mmc1 = &sdmmc0;
|
||||
};
|
||||
|
||||
chosen: chosen {
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
From f15be3d4a0a55db2b50f319c378a2d16ceb21f86 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Osipenko <dmitry.osipenko@collabora.com>
|
||||
Date: Mon, 17 Feb 2025 01:16:33 +0300
|
||||
Subject: [PATCH] arm64: dts: rockchip: rk356x: Add MSI controller node
|
||||
|
||||
Rockchip 356x SoC's GIC has two hardware integration issues that
|
||||
affect MSI functionality of the GIC. Previously, both these GIC
|
||||
issues were worked around by using MBI for MSI instead of ITS
|
||||
because kernel GIC driver didn't have necessary quirks.
|
||||
|
||||
First issue is about RK356x GIC not supporting programmable
|
||||
shareability, while reporting it as supported in a GIC's feature
|
||||
register. Rockchip assigned Erratum ID #3568001 for this issue. This
|
||||
patch adds dma-noncoherent property to the GIC node, denoting that a SW
|
||||
workaround is required for mitigating the issue.
|
||||
|
||||
Second issue is about GIC AXI master interface addressing limited to
|
||||
the first 4GB of physical address space. Rockchip assigned Erratum
|
||||
ID #3568002 for this issue.
|
||||
|
||||
Now that kernel supports quirks for both of the erratums, add
|
||||
MSI controller node to RK356x device-tree.
|
||||
|
||||
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: https://lore.kernel.org/all/20250216221634.364158-3-dmitry.osipenko@collabora.com
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk356x-base.dtsi | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk356x.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
|
||||
@@ -364,6 +364,18 @@
|
||||
mbi-alias = <0x0 0xfd410000>;
|
||||
mbi-ranges = <296 24>;
|
||||
msi-controller;
|
||||
+ ranges;
|
||||
+ #address-cells = <2>;
|
||||
+ #size-cells = <2>;
|
||||
+ dma-noncoherent;
|
||||
+
|
||||
+ its: msi-controller@fd440000 {
|
||||
+ compatible = "arm,gic-v3-its";
|
||||
+ reg = <0x0 0xfd440000 0 0x20000>;
|
||||
+ dma-noncoherent;
|
||||
+ msi-controller;
|
||||
+ #msi-cells = <1>;
|
||||
+ };
|
||||
};
|
||||
|
||||
usb_host0_ehci: usb@fd800000 {
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
From b956c9de91757c9478e24fc9f6a57fd46f0a49f0 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Osipenko <dmitry.osipenko@collabora.com>
|
||||
Date: Mon, 17 Feb 2025 01:16:34 +0300
|
||||
Subject: [PATCH] arm64: dts: rockchip: rk356x: Move PCIe MSI to use GIC
|
||||
ITS instead of MBI
|
||||
|
||||
Rockchip 356x device-tree now supports GIC ITS. Move PCIe controller's
|
||||
MSI to use ITS instead of MBI. This removes extra CPU overhead of handling
|
||||
PCIe MBIs by letting GIC's ITS to serve the PCIe MSIs.
|
||||
|
||||
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: https://lore.kernel.org/all/20250216221634.364158-4-dmitry.osipenko@collabora.com
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk356x-base.dtsi | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk356x.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
|
||||
@@ -1050,7 +1050,7 @@
|
||||
num-ib-windows = <6>;
|
||||
num-ob-windows = <2>;
|
||||
max-link-speed = <2>;
|
||||
- msi-map = <0x0 &gic 0x0 0x1000>;
|
||||
+ msi-map = <0x0 &its 0x0 0x1000>;
|
||||
num-lanes = <1>;
|
||||
phys = <&combphy2 PHY_TYPE_PCIE>;
|
||||
phy-names = "pcie-phy";
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
From fbea35a661ed100cee2f3bab8015fb0155508106 Mon Sep 17 00:00:00 2001
|
||||
From: Chukun Pan <amadeus@jmu.edu.cn>
|
||||
Date: Sat, 8 Mar 2025 17:30:08 +0800
|
||||
Subject: [PATCH] arm64: dts: rockchip: Move rk3568 PCIe3 MSI to use GIC ITS
|
||||
|
||||
Following commit b956c9de9175 ("arm64: dts: rockchip: rk356x: Move
|
||||
PCIe MSI to use GIC ITS instead of MBI"), change the PCIe3 controller's
|
||||
MSI on rk3568 to use ITS, so that all MSI-X can work properly.
|
||||
|
||||
Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
|
||||
Link: https://lore.kernel.org/r/20250308093008.568437-2-amadeus@jmu.edu.cn
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3568.dtsi | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3568.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3568.dtsi
|
||||
@@ -64,7 +64,7 @@
|
||||
compatible = "rockchip,rk3568-pcie";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
- bus-range = <0x0 0xf>;
|
||||
+ bus-range = <0x10 0x1f>;
|
||||
clocks = <&cru ACLK_PCIE30X1_MST>, <&cru ACLK_PCIE30X1_SLV>,
|
||||
<&cru ACLK_PCIE30X1_DBI>, <&cru PCLK_PCIE30X1>,
|
||||
<&cru CLK_PCIE30X1_AUX_NDFT>;
|
||||
@@ -87,7 +87,7 @@
|
||||
num-ib-windows = <6>;
|
||||
num-ob-windows = <2>;
|
||||
max-link-speed = <3>;
|
||||
- msi-map = <0x0 &gic 0x1000 0x1000>;
|
||||
+ msi-map = <0x1000 &its 0x1000 0x1000>;
|
||||
num-lanes = <1>;
|
||||
phys = <&pcie30phy>;
|
||||
phy-names = "pcie-phy";
|
||||
@@ -117,7 +117,7 @@
|
||||
compatible = "rockchip,rk3568-pcie";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
- bus-range = <0x0 0xf>;
|
||||
+ bus-range = <0x20 0x2f>;
|
||||
clocks = <&cru ACLK_PCIE30X2_MST>, <&cru ACLK_PCIE30X2_SLV>,
|
||||
<&cru ACLK_PCIE30X2_DBI>, <&cru PCLK_PCIE30X2>,
|
||||
<&cru CLK_PCIE30X2_AUX_NDFT>;
|
||||
@@ -140,7 +140,7 @@
|
||||
num-ib-windows = <6>;
|
||||
num-ob-windows = <2>;
|
||||
max-link-speed = <3>;
|
||||
- msi-map = <0x0 &gic 0x2000 0x1000>;
|
||||
+ msi-map = <0x2000 &its 0x2000 0x1000>;
|
||||
num-lanes = <2>;
|
||||
phys = <&pcie30phy>;
|
||||
phy-names = "pcie-phy";
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
From a6ae420439dc47a58550a6e61e596e9dd1562caf Mon Sep 17 00:00:00 2001
|
||||
From: Rick Wertenbroek <rick.wertenbroek@gmail.com>
|
||||
Date: Wed, 6 Nov 2024 14:03:13 +0100
|
||||
Subject: [PATCH] arm64: dts: rockchip: enable USB3 on NanoPC-T6
|
||||
|
||||
Enable the USB3 port on FriendlyELEC NanoPC-T6.
|
||||
|
||||
Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20241106130314.1289055-1-rick.wertenbroek@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
.../boot/dts/rockchip/rk3588-nanopc-t6.dtsi | 36 +++++++++++++++++++
|
||||
1 file changed, 36 insertions(+)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3588-nanopc-t6.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3588-nanopc-t6.dtsi
|
||||
@@ -159,6 +159,20 @@
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
+ vbus5v0_usb: vbus5v0-usb-regulator {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&usb5v_pwren>;
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-name = "vbus5v0_usb";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ vin-supply = <&vcc5v0_sys>;
|
||||
+ };
|
||||
+
|
||||
vcc3v3_pcie2x1l0: vcc3v3-pcie2x1l0-regulator {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-high;
|
||||
@@ -575,6 +589,10 @@
|
||||
rockchip,pins = <1 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
};
|
||||
|
||||
+ usb5v_pwren: usb5v_pwren {
|
||||
+ rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+
|
||||
usbc0_int: usbc0-int {
|
||||
rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
};
|
||||
@@ -973,6 +991,14 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&u2phy1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&u2phy1_otg {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&u2phy2_host {
|
||||
status = "okay";
|
||||
};
|
||||
@@ -1012,6 +1038,11 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&usbdp_phy1 {
|
||||
+ phy-supply = <&vbus5v0_usb>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&usb_host0_ehci {
|
||||
status = "okay";
|
||||
};
|
||||
@@ -1032,6 +1063,11 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&usb_host1_xhci {
|
||||
+ dr_mode = "host";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&usb_host1_ehci {
|
||||
status = "okay";
|
||||
};
|
||||
+669
@@ -0,0 +1,669 @@
|
||||
From deaefeaf3df433d50935b9a85076041040f06d74 Mon Sep 17 00:00:00 2001
|
||||
From: Liangbin Lian <jjm2473@gmail.com>
|
||||
Date: Tue, 14 Oct 2025 13:12:26 +0800
|
||||
Subject: [PATCH] arm64: dts: rockchip: add LinkEase EasePi R1
|
||||
|
||||
LinkEase EasePi R1 [1] is a high-performance mini router.
|
||||
|
||||
Specification:
|
||||
- Rockchip RK3568
|
||||
- 2GB/4GB LPDDR4 RAM
|
||||
- 16GB on-board eMMC
|
||||
- 1x M.2 key for 2280 NVMe (PCIe 3.0)
|
||||
- 1x USB 3.0 Type-A
|
||||
- 1x USB 2.0 Type-C (for USB flashing)
|
||||
- 2x 1000 Base-T (native, RTL8211F)
|
||||
- 2x 2500 Base-T (PCIe, RTL8125B)
|
||||
- 1x HDMI 2.0 Output
|
||||
- 12v DC Jack
|
||||
- 1x Power key connected to PMIC
|
||||
- 2x LEDs (one static power supplied, one GPIO controlled)
|
||||
|
||||
[1] https://doc.linkease.com/zh/guide/easepi-r1/hardware.html
|
||||
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Signed-off-by: Liangbin Lian <jjm2473@gmail.com>
|
||||
Link: https://patch.msgid.link/20251014051226.64255-4-jjm2473@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/Makefile | 1 +
|
||||
.../boot/dts/rockchip/rk3568-easepi-r1.dts | 623 ++++++++++++++++++
|
||||
2 files changed, 624 insertions(+)
|
||||
create mode 100644 arch/arm64/boot/dts/rockchip/rk3568-easepi-r1.dts
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/Makefile
|
||||
+++ b/arch/arm64/boot/dts/rockchip/Makefile
|
||||
@@ -109,6 +109,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-bo
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-lckfb-tspi.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-lubancat-1.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-bpi-r2-pro.dtb
|
||||
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-easepi-r1.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb1-v10.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-fastrhino-r66s.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-fastrhino-r68s.dtb
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3568-easepi-r1.dts
|
||||
@@ -0,0 +1,623 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/input/input.h>
|
||||
+#include <dt-bindings/leds/common.h>
|
||||
+#include <dt-bindings/pinctrl/rockchip.h>
|
||||
+#include <dt-bindings/soc/rockchip,vop2.h>
|
||||
+#include "rk3568.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "LinkEase EasePi R1";
|
||||
+ compatible = "linkease,easepi-r1", "rockchip,rk3568";
|
||||
+
|
||||
+ aliases {
|
||||
+ ethernet0 = &gmac0;
|
||||
+ ethernet1 = &gmac1;
|
||||
+ mmc0 = &sdhci;
|
||||
+ };
|
||||
+
|
||||
+ chosen: chosen {
|
||||
+ stdout-path = "serial2:1500000n8";
|
||||
+ };
|
||||
+
|
||||
+ adc-keys {
|
||||
+ compatible = "adc-keys";
|
||||
+ io-channels = <&saradc 0>;
|
||||
+ io-channel-names = "buttons";
|
||||
+ keyup-threshold-microvolt = <1800000>;
|
||||
+
|
||||
+ button-recovery {
|
||||
+ label = "Recovery";
|
||||
+ linux,code = <KEY_VENDOR>;
|
||||
+ press-threshold-microvolt = <1750>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ gpio-leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&status_led_pin>;
|
||||
+
|
||||
+ status_led: led-status {
|
||||
+ color = <LED_COLOR_ID_GREEN>;
|
||||
+ function = LED_FUNCTION_STATUS;
|
||||
+ gpios = <&gpio2 RK_PD7 GPIO_ACTIVE_HIGH>;
|
||||
+ linux,default-trigger = "heartbeat";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ hdmi-con {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ type = "a";
|
||||
+
|
||||
+ port {
|
||||
+ hdmi_con_in: endpoint {
|
||||
+ remote-endpoint = <&hdmi_out_con>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ dc_12v: regulator-dc-12v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "dc_12v";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <12000000>;
|
||||
+ regulator-max-microvolt = <12000000>;
|
||||
+ };
|
||||
+
|
||||
+ vcc5v0_sys: regulator-vcc5v0-sys {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc5v0_sys";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ vin-supply = <&dc_12v>;
|
||||
+ };
|
||||
+
|
||||
+ vcc3v3_sys: regulator-vcc3v3-sys {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc3v3_sys";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ vin-supply = <&dc_12v>;
|
||||
+ };
|
||||
+
|
||||
+ pcie30_avdd0v9: regulator-pcie30-avdd0v9 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "pcie30_avdd0v9";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <900000>;
|
||||
+ regulator-max-microvolt = <900000>;
|
||||
+ vin-supply = <&vcc3v3_sys>;
|
||||
+ };
|
||||
+
|
||||
+ pcie30_avdd1v8: regulator-pcie30-avdd1v8 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "pcie30_avdd1v8";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+ vin-supply = <&vcc3v3_sys>;
|
||||
+ };
|
||||
+
|
||||
+ regulator-vdd0v95-25glan {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio3 RK_PB1 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&vdd0v95_25glan_en>;
|
||||
+ regulator-name = "vdd0v95_25glan";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <950000>;
|
||||
+ regulator-max-microvolt = <950000>;
|
||||
+ vin-supply = <&vcc3v3_sys>;
|
||||
+ };
|
||||
+
|
||||
+ vcc3v3_nvme: regulator-vcc3v3-nvme {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ enable-active-high;
|
||||
+ gpio = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&vcc3v3_nvme_en>;
|
||||
+ regulator-name = "vcc3v3_nvme";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ vin-supply = <&dc_12v>;
|
||||
+ };
|
||||
+
|
||||
+};
|
||||
+
|
||||
+&combphy1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&combphy2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&cpu0 {
|
||||
+ cpu-supply = <&vdd_cpu>;
|
||||
+};
|
||||
+
|
||||
+&cpu1 {
|
||||
+ cpu-supply = <&vdd_cpu>;
|
||||
+};
|
||||
+
|
||||
+&cpu2 {
|
||||
+ cpu-supply = <&vdd_cpu>;
|
||||
+};
|
||||
+
|
||||
+&cpu3 {
|
||||
+ cpu-supply = <&vdd_cpu>;
|
||||
+};
|
||||
+
|
||||
+&gmac0 {
|
||||
+ assigned-clocks = <&cru SCLK_GMAC0_RX_TX>, <&cru SCLK_GMAC0>;
|
||||
+ assigned-clock-parents = <&cru SCLK_GMAC0_RGMII_SPEED>;
|
||||
+ assigned-clock-rates = <0>, <125000000>;
|
||||
+ phy-handle = <&rgmii_phy0>;
|
||||
+ phy-mode = "rgmii-id";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&gmac0_miim
|
||||
+ &gmac0_tx_bus2
|
||||
+ &gmac0_rx_bus2
|
||||
+ &gmac0_rgmii_clk
|
||||
+ &gmac0_rgmii_bus>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&gmac1 {
|
||||
+ assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
|
||||
+ assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>;
|
||||
+ assigned-clock-rates = <0>, <125000000>;
|
||||
+ phy-handle = <&rgmii_phy1>;
|
||||
+ phy-mode = "rgmii-id";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&gmac1m1_miim
|
||||
+ &gmac1m1_tx_bus2
|
||||
+ &gmac1m1_rx_bus2
|
||||
+ &gmac1m1_rgmii_clk
|
||||
+ &gmac1m1_rgmii_bus>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&gpu {
|
||||
+ mali-supply = <&vdd_gpu>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi {
|
||||
+ avdd-0v9-supply = <&vdda0v9_image>;
|
||||
+ avdd-1v8-supply = <&vcca1v8_image>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_in {
|
||||
+ hdmi_in_vp0: endpoint {
|
||||
+ remote-endpoint = <&vp0_out_hdmi>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdmi_out {
|
||||
+ hdmi_out_con: endpoint {
|
||||
+ remote-endpoint = <&hdmi_con_in>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdmi_sound {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c0 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ vdd_cpu: regulator@1c {
|
||||
+ compatible = "tcs,tcs4525";
|
||||
+ reg = <0x1c>;
|
||||
+ fcs,suspend-voltage-selector = <1>;
|
||||
+ regulator-name = "vdd_cpu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <800000>;
|
||||
+ regulator-max-microvolt = <1150000>;
|
||||
+ regulator-ramp-delay = <2300>;
|
||||
+ vin-supply = <&vcc5v0_sys>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ rk809: pmic@20 {
|
||||
+ compatible = "rockchip,rk809";
|
||||
+ reg = <0x20>;
|
||||
+ interrupt-parent = <&gpio0>;
|
||||
+ interrupts = <RK_PA3 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ #clock-cells = <1>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pmic_int>;
|
||||
+ system-power-controller;
|
||||
+ vcc1-supply = <&vcc3v3_sys>;
|
||||
+ vcc2-supply = <&vcc3v3_sys>;
|
||||
+ vcc3-supply = <&vcc3v3_sys>;
|
||||
+ vcc4-supply = <&vcc3v3_sys>;
|
||||
+ vcc5-supply = <&vcc3v3_sys>;
|
||||
+ vcc6-supply = <&vcc3v3_sys>;
|
||||
+ vcc7-supply = <&vcc3v3_sys>;
|
||||
+ vcc8-supply = <&vcc3v3_sys>;
|
||||
+ vcc9-supply = <&vcc3v3_sys>;
|
||||
+ wakeup-source;
|
||||
+
|
||||
+ regulators {
|
||||
+ vdd_logic: DCDC_REG1 {
|
||||
+ regulator-name = "vdd_logic";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-initial-mode = <0x2>;
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <1350000>;
|
||||
+ regulator-ramp-delay = <6001>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_gpu: DCDC_REG2 {
|
||||
+ regulator-name = "vdd_gpu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-initial-mode = <0x2>;
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <1350000>;
|
||||
+ regulator-ramp-delay = <6001>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_ddr: DCDC_REG3 {
|
||||
+ regulator-name = "vcc_ddr";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-initial-mode = <0x2>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_npu: DCDC_REG4 {
|
||||
+ regulator-name = "vdd_npu";
|
||||
+ regulator-initial-mode = <0x2>;
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <1350000>;
|
||||
+ regulator-ramp-delay = <6001>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_1v8: DCDC_REG5 {
|
||||
+ regulator-name = "vcc_1v8";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda0v9_image: LDO_REG1 {
|
||||
+ regulator-name = "vdda0v9_image";
|
||||
+ regulator-min-microvolt = <950000>;
|
||||
+ regulator-max-microvolt = <950000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda_0v9: LDO_REG2 {
|
||||
+ regulator-name = "vdda_0v9";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <900000>;
|
||||
+ regulator-max-microvolt = <900000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdda0v9_pmu: LDO_REG3 {
|
||||
+ regulator-name = "vdda0v9_pmu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <900000>;
|
||||
+ regulator-max-microvolt = <900000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <900000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vccio_acodec: LDO_REG4 {
|
||||
+ regulator-name = "vccio_acodec";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vccio_sd: LDO_REG5 {
|
||||
+ regulator-name = "vccio_sd";
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc3v3_pmu: LDO_REG6 {
|
||||
+ regulator-name = "vcc3v3_pmu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <3300000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcca_1v8: LDO_REG7 {
|
||||
+ regulator-name = "vcca_1v8";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcca1v8_pmu: LDO_REG8 {
|
||||
+ regulator-name = "vcca1v8_pmu";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcca1v8_image: LDO_REG9 {
|
||||
+ regulator-name = "vcca1v8_image";
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_3v3: SWITCH_REG1 {
|
||||
+ regulator-name = "vcc_3v3";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc3v3_sd: SWITCH_REG2 {
|
||||
+ regulator-name = "vcc3v3_sd";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2s0_8ch {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mdio0 {
|
||||
+ rgmii_phy0: ethernet-phy@1 {
|
||||
+ compatible = "ethernet-phy-ieee802.3-c22";
|
||||
+ reg = <0x1>;
|
||||
+ pinctrl-0 = <ð_phy0_reset_pin>;
|
||||
+ pinctrl-names = "default";
|
||||
+ reset-assert-us = <20000>;
|
||||
+ reset-deassert-us = <100000>;
|
||||
+ reset-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&mdio1 {
|
||||
+ rgmii_phy1: ethernet-phy@1 {
|
||||
+ compatible = "ethernet-phy-ieee802.3-c22";
|
||||
+ reg = <0x1>;
|
||||
+ pinctrl-0 = <ð_phy1_reset_pin>;
|
||||
+ pinctrl-names = "default";
|
||||
+ reset-assert-us = <20000>;
|
||||
+ reset-deassert-us = <100000>;
|
||||
+ reset-gpios = <&gpio2 RK_PD1 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+/* ETH3 */
|
||||
+&pcie2x1 {
|
||||
+ reset-gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_HIGH>;
|
||||
+ vpcie3v3-supply = <&vcc3v3_sys>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pcie30phy {
|
||||
+ data-lanes = <1 2>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+/* ETH2 */
|
||||
+&pcie3x1 {
|
||||
+ num-lanes = <1>;
|
||||
+ reset-gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_HIGH>;
|
||||
+ vpcie3v3-supply = <&vcc3v3_sys>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+/* M.2 Key for 2280 NVMe */
|
||||
+&pcie3x2 {
|
||||
+ num-lanes = <1>;
|
||||
+ reset-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_HIGH>;
|
||||
+ vpcie3v3-supply = <&vcc3v3_nvme>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pinctrl {
|
||||
+ gmac0 {
|
||||
+ eth_phy0_reset_pin: eth-phy0-reset-pin {
|
||||
+ rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ gmac1 {
|
||||
+ eth_phy1_reset_pin: eth-phy1-reset-pin {
|
||||
+ rockchip,pins = <2 RK_PD1 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ gpio-leds {
|
||||
+ status_led_pin: status-led-pin {
|
||||
+ rockchip,pins = <2 RK_PD7 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ nvme {
|
||||
+ vcc3v3_nvme_en: vcc3v3-nvme-en {
|
||||
+ rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pcie-nic {
|
||||
+ vdd0v95_25glan_en: vdd0v95-25glan-en {
|
||||
+ rockchip,pins = <3 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pmic {
|
||||
+ pmic_int: pmic-int {
|
||||
+ rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+};
|
||||
+
|
||||
+&pmu_io_domains {
|
||||
+ pmuio1-supply = <&vcc3v3_pmu>;
|
||||
+ pmuio2-supply = <&vcc3v3_pmu>;
|
||||
+ vccio1-supply = <&vccio_acodec>;
|
||||
+ vccio3-supply = <&vccio_sd>;
|
||||
+ vccio4-supply = <&vcc_1v8>;
|
||||
+ vccio5-supply = <&vcc_3v3>;
|
||||
+ vccio6-supply = <&vcc_1v8>;
|
||||
+ vccio7-supply = <&vcc_3v3>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&saradc {
|
||||
+ vref-supply = <&vcca_1v8>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&sdhci {
|
||||
+ bus-width = <8>;
|
||||
+ max-frequency = <200000000>;
|
||||
+ non-removable;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd &emmc_datastrobe>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&tsadc {
|
||||
+ rockchip,hw-tshut-mode = <1>;
|
||||
+ rockchip,hw-tshut-polarity = <0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+/* OTG Only USB2.0, Only device mode */
|
||||
+&usb_host0_xhci {
|
||||
+ dr_mode = "peripheral";
|
||||
+ extcon = <&usb2phy0>;
|
||||
+ maximum-speed = "high-speed";
|
||||
+ phys = <&usb2phy0_otg>;
|
||||
+ phy-names = "usb2-phy";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_host1_xhci {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2phy0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2phy0_host {
|
||||
+ phy-supply = <&vcc5v0_sys>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2phy0_otg {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vop {
|
||||
+ assigned-clocks = <&cru DCLK_VOP0>, <&cru DCLK_VOP1>;
|
||||
+ assigned-clock-parents = <&pmucru PLL_HPLL>, <&cru PLL_VPLL>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vop_mmu {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&vp0 {
|
||||
+ vp0_out_hdmi: endpoint@ROCKCHIP_VOP2_EP_HDMI0 {
|
||||
+ reg = <ROCKCHIP_VOP2_EP_HDMI0>;
|
||||
+ remote-endpoint = <&hdmi_in_vp0>;
|
||||
+ };
|
||||
+};
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
From 954f07012794a3aa7ae89e56f070eaa1643af50b Mon Sep 17 00:00:00 2001
|
||||
From: Diederik de Haas <didi.debian@cknow.org>
|
||||
Date: Fri, 11 Jul 2025 16:20:37 +0200
|
||||
Subject: [PATCH] arm64: dts: rockchip: Add reset button to NanoPi R5S
|
||||
|
||||
The NanoPi R5S LTS version has a reset button, which is connected via
|
||||
GPIO. Note that the non-LTS version does not have the reset button and
|
||||
therefore on page 19 of the schematic version 2204 it is marked 'NC',
|
||||
but it is connected on the LTS version.
|
||||
|
||||
Link: https://lore.kernel.org/r/20250711142138.197445-1-didi.debian@cknow.org
|
||||
Signed-off-by: Diederik de Haas <didi.debian@cknow.org>
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
arch/arm64/boot/dts/rockchip/rk3568-nanopi-r5s.dts | 19 +++++++++++++++++++
|
||||
1 file changed, 19 insertions(+)
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3568-nanopi-r5s.dts
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3568-nanopi-r5s.dts
|
||||
@@ -17,6 +17,19 @@
|
||||
ethernet0 = &gmac0;
|
||||
};
|
||||
|
||||
+ gpio-keys {
|
||||
+ compatible = "gpio-keys";
|
||||
+ pinctrl-0 = <&gpio4_a0_k1_pin>;
|
||||
+ pinctrl-names = "default";
|
||||
+
|
||||
+ button-reset {
|
||||
+ debounce-interval = <50>;
|
||||
+ gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;
|
||||
+ label = "RESET";
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
gpio-leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
@@ -116,6 +129,12 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ gpio-keys {
|
||||
+ gpio4_a0_k1_pin: gpio4-a0-k1-pin {
|
||||
+ rockchip,pins = <4 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
gpio-leds {
|
||||
lan1_led_pin: lan1-led-pin {
|
||||
rockchip,pins = <3 RK_PD6 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||
+337
@@ -0,0 +1,337 @@
|
||||
From b08e2f42e86b5848add254da45b56fc672e2bced Mon Sep 17 00:00:00 2001
|
||||
From: Steven Price <steven.price@arm.com>
|
||||
Date: Wed, 2 Oct 2024 15:16:29 +0100
|
||||
Subject: [PATCH] irqchip/gic-v3-its: Share ITS tables with a non-trusted
|
||||
hypervisor
|
||||
|
||||
Within a realm guest the ITS is emulated by the host. This means the
|
||||
allocations must have been made available to the host by a call to
|
||||
set_memory_decrypted(). Introduce an allocation function which performs
|
||||
this extra call.
|
||||
|
||||
For the ITT use a custom genpool-based allocator that calls
|
||||
set_memory_decrypted() for each page allocated, but then suballocates the
|
||||
size needed for each ITT. Note that there is no mechanism implemented to
|
||||
return pages from the genpool, but it is unlikely that the peak number of
|
||||
devices will be much larger than the normal level - so this isn't expected
|
||||
to be an issue.
|
||||
|
||||
Co-developed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
|
||||
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
|
||||
Signed-off-by: Steven Price <steven.price@arm.com>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
Tested-by: Will Deacon <will@kernel.org>
|
||||
Reviewed-by: Marc Zyngier <maz@kernel.org>
|
||||
Link: https://lore.kernel.org/all/20241002141630.433502-2-steven.price@arm.com
|
||||
---
|
||||
drivers/irqchip/irq-gic-v3-its.c | 138 +++++++++++++++++++++++++------
|
||||
1 file changed, 115 insertions(+), 23 deletions(-)
|
||||
|
||||
--- a/drivers/irqchip/irq-gic-v3-its.c
|
||||
+++ b/drivers/irqchip/irq-gic-v3-its.c
|
||||
@@ -12,12 +12,14 @@
|
||||
#include <linux/crash_dump.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/efi.h>
|
||||
+#include <linux/genalloc.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/iommu.h>
|
||||
#include <linux/iopoll.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/log2.h>
|
||||
+#include <linux/mem_encrypt.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/msi.h>
|
||||
@@ -27,6 +29,7 @@
|
||||
#include <linux/of_pci.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/percpu.h>
|
||||
+#include <linux/set_memory.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/syscore_ops.h>
|
||||
|
||||
@@ -166,6 +169,7 @@ struct its_device {
|
||||
struct its_node *its;
|
||||
struct event_lpi_map event_map;
|
||||
void *itt;
|
||||
+ u32 itt_sz;
|
||||
u32 nr_ites;
|
||||
u32 device_id;
|
||||
bool shared;
|
||||
@@ -201,6 +205,87 @@ static DEFINE_IDA(its_vpeid_ida);
|
||||
#define gic_data_rdist_rd_base() (gic_data_rdist()->rd_base)
|
||||
#define gic_data_rdist_vlpi_base() (gic_data_rdist_rd_base() + SZ_128K)
|
||||
|
||||
+static struct page *its_alloc_pages_node(int node, gfp_t gfp,
|
||||
+ unsigned int order)
|
||||
+{
|
||||
+ struct page *page;
|
||||
+ int ret = 0;
|
||||
+
|
||||
+ page = alloc_pages_node(node, gfp, order);
|
||||
+
|
||||
+ if (!page)
|
||||
+ return NULL;
|
||||
+
|
||||
+ ret = set_memory_decrypted((unsigned long)page_address(page),
|
||||
+ 1 << order);
|
||||
+ /*
|
||||
+ * If set_memory_decrypted() fails then we don't know what state the
|
||||
+ * page is in, so we can't free it. Instead we leak it.
|
||||
+ * set_memory_decrypted() will already have WARNed.
|
||||
+ */
|
||||
+ if (ret)
|
||||
+ return NULL;
|
||||
+
|
||||
+ return page;
|
||||
+}
|
||||
+
|
||||
+static struct page *its_alloc_pages(gfp_t gfp, unsigned int order)
|
||||
+{
|
||||
+ return its_alloc_pages_node(NUMA_NO_NODE, gfp, order);
|
||||
+}
|
||||
+
|
||||
+static void its_free_pages(void *addr, unsigned int order)
|
||||
+{
|
||||
+ /*
|
||||
+ * If the memory cannot be encrypted again then we must leak the pages.
|
||||
+ * set_memory_encrypted() will already have WARNed.
|
||||
+ */
|
||||
+ if (set_memory_encrypted((unsigned long)addr, 1 << order))
|
||||
+ return;
|
||||
+ free_pages((unsigned long)addr, order);
|
||||
+}
|
||||
+
|
||||
+static struct gen_pool *itt_pool;
|
||||
+
|
||||
+static void *itt_alloc_pool(int node, int size)
|
||||
+{
|
||||
+ unsigned long addr;
|
||||
+ struct page *page;
|
||||
+
|
||||
+ if (size >= PAGE_SIZE) {
|
||||
+ page = its_alloc_pages_node(node, GFP_KERNEL | __GFP_ZERO, get_order(size));
|
||||
+
|
||||
+ return page ? page_address(page) : NULL;
|
||||
+ }
|
||||
+
|
||||
+ do {
|
||||
+ addr = gen_pool_alloc(itt_pool, size);
|
||||
+ if (addr)
|
||||
+ break;
|
||||
+
|
||||
+ page = its_alloc_pages_node(node, GFP_KERNEL | __GFP_ZERO, 1);
|
||||
+ if (!page)
|
||||
+ break;
|
||||
+
|
||||
+ gen_pool_add(itt_pool, (unsigned long)page_address(page), PAGE_SIZE, node);
|
||||
+ } while (!addr);
|
||||
+
|
||||
+ return (void *)addr;
|
||||
+}
|
||||
+
|
||||
+static void itt_free_pool(void *addr, int size)
|
||||
+{
|
||||
+ if (!addr)
|
||||
+ return;
|
||||
+
|
||||
+ if (size >= PAGE_SIZE) {
|
||||
+ its_free_pages(addr, get_order(size));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ gen_pool_free(itt_pool, (unsigned long)addr, size);
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Skip ITSs that have no vLPIs mapped, unless we're on GICv4.1, as we
|
||||
* always have vSGIs mapped.
|
||||
@@ -2183,7 +2268,8 @@ static struct page *its_allocate_prop_ta
|
||||
{
|
||||
struct page *prop_page;
|
||||
|
||||
- prop_page = alloc_pages(gfp_flags, get_order(LPI_PROPBASE_SZ));
|
||||
+ prop_page = its_alloc_pages(gfp_flags,
|
||||
+ get_order(LPI_PROPBASE_SZ));
|
||||
if (!prop_page)
|
||||
return NULL;
|
||||
|
||||
@@ -2194,8 +2280,7 @@ static struct page *its_allocate_prop_ta
|
||||
|
||||
static void its_free_prop_table(struct page *prop_page)
|
||||
{
|
||||
- free_pages((unsigned long)page_address(prop_page),
|
||||
- get_order(LPI_PROPBASE_SZ));
|
||||
+ its_free_pages(page_address(prop_page), get_order(LPI_PROPBASE_SZ));
|
||||
}
|
||||
|
||||
static bool gic_check_reserved_range(phys_addr_t addr, unsigned long size)
|
||||
@@ -2317,7 +2402,7 @@ static int its_setup_baser(struct its_no
|
||||
order = get_order(GITS_BASER_PAGES_MAX * psz);
|
||||
}
|
||||
|
||||
- page = alloc_pages_node(its->numa_node, GFP_KERNEL | __GFP_ZERO, order);
|
||||
+ page = its_alloc_pages_node(its->numa_node, GFP_KERNEL | __GFP_ZERO, order);
|
||||
if (!page)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -2330,7 +2415,7 @@ static int its_setup_baser(struct its_no
|
||||
/* 52bit PA is supported only when PageSize=64K */
|
||||
if (psz != SZ_64K) {
|
||||
pr_err("ITS: no 52bit PA support when psz=%d\n", psz);
|
||||
- free_pages((unsigned long)base, order);
|
||||
+ its_free_pages(base, order);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
@@ -2386,7 +2471,7 @@ retry_baser:
|
||||
pr_err("ITS@%pa: %s doesn't stick: %llx %llx\n",
|
||||
&its->phys_base, its_base_type_string[type],
|
||||
val, tmp);
|
||||
- free_pages((unsigned long)base, order);
|
||||
+ its_free_pages(base, order);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
@@ -2525,8 +2610,7 @@ static void its_free_tables(struct its_n
|
||||
|
||||
for (i = 0; i < GITS_BASER_NR_REGS; i++) {
|
||||
if (its->tables[i].base) {
|
||||
- free_pages((unsigned long)its->tables[i].base,
|
||||
- its->tables[i].order);
|
||||
+ its_free_pages(its->tables[i].base, its->tables[i].order);
|
||||
its->tables[i].base = NULL;
|
||||
}
|
||||
}
|
||||
@@ -2792,7 +2876,7 @@ static bool allocate_vpe_l2_table(int cp
|
||||
|
||||
/* Allocate memory for 2nd level table */
|
||||
if (!table[idx]) {
|
||||
- page = alloc_pages(GFP_KERNEL | __GFP_ZERO, get_order(psz));
|
||||
+ page = its_alloc_pages(GFP_KERNEL | __GFP_ZERO, get_order(psz));
|
||||
if (!page)
|
||||
return false;
|
||||
|
||||
@@ -2911,7 +2995,7 @@ static int allocate_vpe_l1_table(void)
|
||||
|
||||
pr_debug("np = %d, npg = %lld, psz = %d, epp = %d, esz = %d\n",
|
||||
np, npg, psz, epp, esz);
|
||||
- page = alloc_pages(GFP_ATOMIC | __GFP_ZERO, get_order(np * PAGE_SIZE));
|
||||
+ page = its_alloc_pages(GFP_ATOMIC | __GFP_ZERO, get_order(np * PAGE_SIZE));
|
||||
if (!page)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -2957,8 +3041,7 @@ static struct page *its_allocate_pending
|
||||
{
|
||||
struct page *pend_page;
|
||||
|
||||
- pend_page = alloc_pages(gfp_flags | __GFP_ZERO,
|
||||
- get_order(LPI_PENDBASE_SZ));
|
||||
+ pend_page = its_alloc_pages(gfp_flags | __GFP_ZERO, get_order(LPI_PENDBASE_SZ));
|
||||
if (!pend_page)
|
||||
return NULL;
|
||||
|
||||
@@ -2970,7 +3053,7 @@ static struct page *its_allocate_pending
|
||||
|
||||
static void its_free_pending_table(struct page *pt)
|
||||
{
|
||||
- free_pages((unsigned long)page_address(pt), get_order(LPI_PENDBASE_SZ));
|
||||
+ its_free_pages(page_address(pt), get_order(LPI_PENDBASE_SZ));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3305,8 +3388,8 @@ static bool its_alloc_table_entry(struct
|
||||
|
||||
/* Allocate memory for 2nd level table */
|
||||
if (!table[idx]) {
|
||||
- page = alloc_pages_node(its->numa_node, GFP_KERNEL | __GFP_ZERO,
|
||||
- get_order(baser->psz));
|
||||
+ page = its_alloc_pages_node(its->numa_node, GFP_KERNEL | __GFP_ZERO,
|
||||
+ get_order(baser->psz));
|
||||
if (!page)
|
||||
return false;
|
||||
|
||||
@@ -3402,7 +3485,6 @@ static struct its_device *its_create_dev
|
||||
if (WARN_ON(!is_power_of_2(nvecs)))
|
||||
nvecs = roundup_pow_of_two(nvecs);
|
||||
|
||||
- dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
/*
|
||||
* Even if the device wants a single LPI, the ITT must be
|
||||
* sized as a power of two (and you need at least one bit...).
|
||||
@@ -3413,7 +3495,11 @@ static struct its_device *its_create_dev
|
||||
nr_ites = max(2, nvecs);
|
||||
sz = nr_ites * (FIELD_GET(GITS_TYPER_ITT_ENTRY_SIZE, its->typer) + 1);
|
||||
sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1;
|
||||
- itt = kzalloc_node(sz, GFP_KERNEL, its->numa_node);
|
||||
+
|
||||
+ itt = itt_alloc_pool(its->numa_node, sz);
|
||||
+
|
||||
+ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
+
|
||||
if (alloc_lpis) {
|
||||
lpi_map = its_lpi_alloc(nvecs, &lpi_base, &nr_lpis);
|
||||
if (lpi_map)
|
||||
@@ -3425,9 +3511,9 @@ static struct its_device *its_create_dev
|
||||
lpi_base = 0;
|
||||
}
|
||||
|
||||
- if (!dev || !itt || !col_map || (!lpi_map && alloc_lpis)) {
|
||||
+ if (!dev || !itt || !col_map || (!lpi_map && alloc_lpis)) {
|
||||
kfree(dev);
|
||||
- kfree(itt);
|
||||
+ itt_free_pool(itt, sz);
|
||||
bitmap_free(lpi_map);
|
||||
kfree(col_map);
|
||||
return NULL;
|
||||
@@ -3437,6 +3523,7 @@ static struct its_device *its_create_dev
|
||||
|
||||
dev->its = its;
|
||||
dev->itt = itt;
|
||||
+ dev->itt_sz = sz;
|
||||
dev->nr_ites = nr_ites;
|
||||
dev->event_map.lpi_map = lpi_map;
|
||||
dev->event_map.col_map = col_map;
|
||||
@@ -3464,7 +3551,7 @@ static void its_free_device(struct its_d
|
||||
list_del(&its_dev->entry);
|
||||
raw_spin_unlock_irqrestore(&its_dev->its->lock, flags);
|
||||
kfree(its_dev->event_map.col_map);
|
||||
- kfree(its_dev->itt);
|
||||
+ itt_free_pool(its_dev->itt, its_dev->itt_sz);
|
||||
kfree(its_dev);
|
||||
}
|
||||
|
||||
@@ -5164,8 +5251,9 @@ static int __init its_probe_one(struct i
|
||||
}
|
||||
}
|
||||
|
||||
- page = alloc_pages_node(its->numa_node, GFP_KERNEL | __GFP_ZERO,
|
||||
- get_order(ITS_CMD_QUEUE_SZ));
|
||||
+ page = its_alloc_pages_node(its->numa_node,
|
||||
+ GFP_KERNEL | __GFP_ZERO,
|
||||
+ get_order(ITS_CMD_QUEUE_SZ));
|
||||
if (!page) {
|
||||
err = -ENOMEM;
|
||||
goto out_unmap_sgir;
|
||||
@@ -5229,7 +5317,7 @@ static int __init its_probe_one(struct i
|
||||
out_free_tables:
|
||||
its_free_tables(its);
|
||||
out_free_cmd:
|
||||
- free_pages((unsigned long)its->cmd_base, get_order(ITS_CMD_QUEUE_SZ));
|
||||
+ its_free_pages(its->cmd_base, get_order(ITS_CMD_QUEUE_SZ));
|
||||
out_unmap_sgir:
|
||||
if (its->sgir_base)
|
||||
iounmap(its->sgir_base);
|
||||
@@ -5715,6 +5803,10 @@ int __init its_init(struct fwnode_handle
|
||||
bool has_v4_1 = false;
|
||||
int err;
|
||||
|
||||
+ itt_pool = gen_pool_create(get_order(ITS_ITT_ALIGN), -1);
|
||||
+ if (!itt_pool)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
gic_rdists = rdists;
|
||||
|
||||
lpi_prop_prio = irq_prio;
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
From bc88d44bd7e45b992cf8c2c2ffbc7bb3e24db4a7 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Price <steven.price@arm.com>
|
||||
Date: Mon, 21 Oct 2024 11:41:05 +0100
|
||||
Subject: [PATCH] irqchip/gic-v3-its: Fix over allocation in
|
||||
itt_alloc_pool()
|
||||
|
||||
itt_alloc_pool() calls its_alloc_pages_node() to allocate an individual
|
||||
page to add to the pool (for allocations <PAGE_SIZE). However the final
|
||||
argument of its_alloc_pages_node() is the page order not the number of
|
||||
pages. Currently it allocates two pages and leaks the second page.
|
||||
Fix it by passing 0 instead (1 << 0 = 1 page).
|
||||
|
||||
Fixes: b08e2f42e86b ("irqchip/gic-v3-its: Share ITS tables with a non-trusted hypervisor")
|
||||
Reported-by: Shanker Donthineni <sdonthineni@nvidia.com>
|
||||
Signed-off-by: Steven Price <steven.price@arm.com>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: https://lore.kernel.org/all/1f6e19c4-1fb9-43ab-a8a2-a465c9cff84b@arm.com
|
||||
Closes: https://lore.kernel.org/r/ed65312a-245c-4fa5-91ad-5d620cab7c6b%40nvidia.com
|
||||
---
|
||||
drivers/irqchip/irq-gic-v3-its.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/irqchip/irq-gic-v3-its.c
|
||||
+++ b/drivers/irqchip/irq-gic-v3-its.c
|
||||
@@ -263,7 +263,7 @@ static void *itt_alloc_pool(int node, in
|
||||
if (addr)
|
||||
break;
|
||||
|
||||
- page = its_alloc_pages_node(node, GFP_KERNEL | __GFP_ZERO, 1);
|
||||
+ page = its_alloc_pages_node(node, GFP_KERNEL | __GFP_ZERO, 0);
|
||||
if (!page)
|
||||
break;
|
||||
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
From 2d81e1bb625238d40a686ed909ff3e1abab7556a Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Osipenko <dmitry.osipenko@collabora.com>
|
||||
Date: Mon, 17 Feb 2025 01:16:32 +0300
|
||||
Subject: [PATCH] irqchip/gic-v3: Add Rockchip 3568002 erratum workaround
|
||||
|
||||
Rockchip RK3566/RK3568 GIC600 integration has DDR addressing
|
||||
limited to the first 32bit of physical address space. Rockchip
|
||||
assigned Erratum ID #3568002 for this issue. Add driver quirk for
|
||||
this Rockchip GIC Erratum.
|
||||
|
||||
Note, that the 0x0201743b GIC600 ID is not Rockchip-specific and is
|
||||
common for many ARM GICv3 implementations. Hence, there is an extra
|
||||
of_machine_is_compatible() check.
|
||||
|
||||
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
Acked-by: Marc Zyngier <maz@kernel.org>
|
||||
Link: https://lore.kernel.org/all/20250216221634.364158-2-dmitry.osipenko@collabora.com
|
||||
---
|
||||
Documentation/arch/arm64/silicon-errata.rst | 2 ++
|
||||
arch/arm64/Kconfig | 9 ++++++++
|
||||
drivers/irqchip/irq-gic-v3-its.c | 23 ++++++++++++++++++++-
|
||||
3 files changed, 33 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/Documentation/arch/arm64/silicon-errata.rst
|
||||
+++ b/Documentation/arch/arm64/silicon-errata.rst
|
||||
@@ -285,6 +285,8 @@ stable kernels.
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| Rockchip | RK3588 | #3588001 | ROCKCHIP_ERRATUM_3588001 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
+| Rockchip | RK3568 | #3568002 | ROCKCHIP_ERRATUM_3568002 |
|
||||
++----------------+-----------------+-----------------+-----------------------------+
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| Fujitsu | A64FX | E#010001 | FUJITSU_ERRATUM_010001 |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
--- a/arch/arm64/Kconfig
|
||||
+++ b/arch/arm64/Kconfig
|
||||
@@ -1298,6 +1298,15 @@ config NVIDIA_CARMEL_CNP_ERRATUM
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
+config ROCKCHIP_ERRATUM_3568002
|
||||
+ bool "Rockchip 3568002: GIC600 can not access physical addresses higher than 4GB"
|
||||
+ default y
|
||||
+ help
|
||||
+ The Rockchip RK3566 and RK3568 GIC600 SoC integrations have AXI
|
||||
+ addressing limited to the first 32bit of physical address space.
|
||||
+
|
||||
+ If unsure, say Y.
|
||||
+
|
||||
config ROCKCHIP_ERRATUM_3588001
|
||||
bool "Rockchip 3588001: GIC600 can not support shareability attributes"
|
||||
default y
|
||||
--- a/drivers/irqchip/irq-gic-v3-its.c
|
||||
+++ b/drivers/irqchip/irq-gic-v3-its.c
|
||||
@@ -205,13 +205,15 @@ static DEFINE_IDA(its_vpeid_ida);
|
||||
#define gic_data_rdist_rd_base() (gic_data_rdist()->rd_base)
|
||||
#define gic_data_rdist_vlpi_base() (gic_data_rdist_rd_base() + SZ_128K)
|
||||
|
||||
+static gfp_t gfp_flags_quirk;
|
||||
+
|
||||
static struct page *its_alloc_pages_node(int node, gfp_t gfp,
|
||||
unsigned int order)
|
||||
{
|
||||
struct page *page;
|
||||
int ret = 0;
|
||||
|
||||
- page = alloc_pages_node(node, gfp, order);
|
||||
+ page = alloc_pages_node(node, gfp | gfp_flags_quirk, order);
|
||||
|
||||
if (!page)
|
||||
return NULL;
|
||||
@@ -4892,6 +4894,17 @@ static bool __maybe_unused its_enable_qu
|
||||
return true;
|
||||
}
|
||||
|
||||
+static bool __maybe_unused its_enable_rk3568002(void *data)
|
||||
+{
|
||||
+ if (!of_machine_is_compatible("rockchip,rk3566") &&
|
||||
+ !of_machine_is_compatible("rockchip,rk3568"))
|
||||
+ return false;
|
||||
+
|
||||
+ gfp_flags_quirk |= GFP_DMA32;
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
static const struct gic_quirk its_quirks[] = {
|
||||
#ifdef CONFIG_CAVIUM_ERRATUM_22375
|
||||
{
|
||||
@@ -4959,6 +4972,14 @@ static const struct gic_quirk its_quirks
|
||||
.property = "dma-noncoherent",
|
||||
.init = its_set_non_coherent,
|
||||
},
|
||||
+#ifdef CONFIG_ROCKCHIP_ERRATUM_3568002
|
||||
+ {
|
||||
+ .desc = "ITS: Rockchip erratum RK3568002",
|
||||
+ .iidr = 0x0201743b,
|
||||
+ .mask = 0xffffffff,
|
||||
+ .init = its_enable_rk3568002,
|
||||
+ },
|
||||
+#endif
|
||||
{
|
||||
}
|
||||
};
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
From 849d9db170fc8a03ce9f64133a1d0cd46c135105 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Tue, 4 Feb 2025 16:35:46 +0100
|
||||
Subject: [PATCH] dt-bindings: reset: Add SCMI reset IDs for RK3588
|
||||
|
||||
When TF-A is used to assert/deassert the resets through SCMI, the
|
||||
IDs communicated to it are different than the ones mainline Linux uses.
|
||||
|
||||
Import the list of SCMI reset IDs from mainline TF-A so that devicetrees
|
||||
can use these IDs more easily.
|
||||
|
||||
Co-developed-by: XiaoDong Huang <derrick.huang@rock-chips.com>
|
||||
Signed-off-by: XiaoDong Huang <derrick.huang@rock-chips.com>
|
||||
Acked-by: Conor Dooley <conor.dooley@microchip.com>
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
---
|
||||
.../dt-bindings/reset/rockchip,rk3588-cru.h | 41 ++++++++++++++++++-
|
||||
1 file changed, 40 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/include/dt-bindings/reset/rockchip,rk3588-cru.h
|
||||
+++ b/include/dt-bindings/reset/rockchip,rk3588-cru.h
|
||||
@@ -1,6 +1,6 @@
|
||||
/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
|
||||
/*
|
||||
- * Copyright (c) 2021 Rockchip Electronics Co. Ltd.
|
||||
+ * Copyright (c) 2021, 2024 Rockchip Electronics Co. Ltd.
|
||||
* Copyright (c) 2022 Collabora Ltd.
|
||||
*
|
||||
* Author: Elaine Zhang <zhangqing@rock-chips.com>
|
||||
@@ -753,4 +753,43 @@
|
||||
|
||||
#define SRST_A_HDMIRX_BIU 660
|
||||
|
||||
+/* SCMI Secure Resets */
|
||||
+
|
||||
+/* Name=SECURE_SOFTRST_CON00,Offset=0xA00 */
|
||||
+#define SCMI_SRST_A_SECURE_NS_BIU 10
|
||||
+#define SCMI_SRST_H_SECURE_NS_BIU 11
|
||||
+#define SCMI_SRST_A_SECURE_S_BIU 12
|
||||
+#define SCMI_SRST_H_SECURE_S_BIU 13
|
||||
+#define SCMI_SRST_P_SECURE_S_BIU 14
|
||||
+#define SCMI_SRST_CRYPTO_CORE 15
|
||||
+/* Name=SECURE_SOFTRST_CON01,Offset=0xA04 */
|
||||
+#define SCMI_SRST_CRYPTO_PKA 16
|
||||
+#define SCMI_SRST_CRYPTO_RNG 17
|
||||
+#define SCMI_SRST_A_CRYPTO 18
|
||||
+#define SCMI_SRST_H_CRYPTO 19
|
||||
+#define SCMI_SRST_KEYLADDER_CORE 25
|
||||
+#define SCMI_SRST_KEYLADDER_RNG 26
|
||||
+#define SCMI_SRST_A_KEYLADDER 27
|
||||
+#define SCMI_SRST_H_KEYLADDER 28
|
||||
+#define SCMI_SRST_P_OTPC_S 29
|
||||
+#define SCMI_SRST_OTPC_S 30
|
||||
+#define SCMI_SRST_WDT_S 31
|
||||
+/* Name=SECURE_SOFTRST_CON02,Offset=0xA08 */
|
||||
+#define SCMI_SRST_T_WDT_S 32
|
||||
+#define SCMI_SRST_H_BOOTROM 33
|
||||
+#define SCMI_SRST_A_DCF 34
|
||||
+#define SCMI_SRST_P_DCF 35
|
||||
+#define SCMI_SRST_H_BOOTROM_NS 37
|
||||
+#define SCMI_SRST_P_KEYLADDER 46
|
||||
+#define SCMI_SRST_H_TRNG_S 47
|
||||
+/* Name=SECURE_SOFTRST_CON03,Offset=0xA0C */
|
||||
+#define SCMI_SRST_H_TRNG_NS 48
|
||||
+#define SCMI_SRST_D_SDMMC_BUFFER 49
|
||||
+#define SCMI_SRST_H_SDMMC 50
|
||||
+#define SCMI_SRST_H_SDMMC_BUFFER 51
|
||||
+#define SCMI_SRST_SDMMC 52
|
||||
+#define SCMI_SRST_P_TRNG_CHK 53
|
||||
+#define SCMI_SRST_TRNG_S 54
|
||||
+
|
||||
+
|
||||
#endif
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
From e00fc3d6e7c2d0b2ab5cf03a576df39cd94479aa Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Tue, 4 Feb 2025 16:35:47 +0100
|
||||
Subject: [PATCH] dt-bindings: rng: add binding for Rockchip RK3588 RNG
|
||||
|
||||
The Rockchip RK3588 SoC has two hardware RNGs accessible to the
|
||||
non-secure world: an RNG in the Crypto IP, and a standalone RNG that is
|
||||
new to this SoC.
|
||||
|
||||
Add a binding for this new standalone RNG. It is distinct hardware from
|
||||
the existing rockchip,rk3568-rng, and therefore gets its own binding as
|
||||
the two hardware IPs are unrelated other than both being made by the
|
||||
same vendor.
|
||||
|
||||
The RNG is capable of firing an interrupt when entropy is ready.
|
||||
|
||||
The reset is optional, as the hardware does a power-on reset, and
|
||||
functions without the software manually resetting it.
|
||||
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Acked-by: Conor Dooley <conor.dooley@microchip.com>
|
||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
---
|
||||
.../bindings/rng/rockchip,rk3588-rng.yaml | 60 +++++++++++++++++++
|
||||
MAINTAINERS | 1 +
|
||||
2 files changed, 61 insertions(+)
|
||||
create mode 100644 Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml
|
||||
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml
|
||||
@@ -0,0 +1,60 @@
|
||||
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
+%YAML 1.2
|
||||
+---
|
||||
+$id: http://devicetree.org/schemas/rng/rockchip,rk3588-rng.yaml#
|
||||
+$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
+
|
||||
+title: Rockchip RK3588 TRNG
|
||||
+
|
||||
+description: True Random Number Generator on Rockchip RK3588 SoC
|
||||
+
|
||||
+maintainers:
|
||||
+ - Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
+
|
||||
+properties:
|
||||
+ compatible:
|
||||
+ enum:
|
||||
+ - rockchip,rk3588-rng
|
||||
+
|
||||
+ reg:
|
||||
+ maxItems: 1
|
||||
+
|
||||
+ clocks:
|
||||
+ items:
|
||||
+ - description: TRNG AHB clock
|
||||
+
|
||||
+ interrupts:
|
||||
+ maxItems: 1
|
||||
+
|
||||
+ resets:
|
||||
+ maxItems: 1
|
||||
+
|
||||
+required:
|
||||
+ - compatible
|
||||
+ - reg
|
||||
+ - clocks
|
||||
+ - interrupts
|
||||
+
|
||||
+additionalProperties: false
|
||||
+
|
||||
+examples:
|
||||
+ - |
|
||||
+ #include <dt-bindings/clock/rockchip,rk3588-cru.h>
|
||||
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
+ #include <dt-bindings/interrupt-controller/irq.h>
|
||||
+ #include <dt-bindings/reset/rockchip,rk3588-cru.h>
|
||||
+ bus {
|
||||
+ #address-cells = <2>;
|
||||
+ #size-cells = <2>;
|
||||
+
|
||||
+ rng@fe378000 {
|
||||
+ compatible = "rockchip,rk3588-rng";
|
||||
+ reg = <0x0 0xfe378000 0x0 0x200>;
|
||||
+ interrupts = <GIC_SPI 400 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
+ clocks = <&scmi_clk SCMI_HCLK_SECURE_NS>;
|
||||
+ resets = <&scmi_reset SCMI_SRST_H_TRNG_NS>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+...
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
From 52b3b329d8e589575d16d8d9adbca9e08041ee82 Mon Sep 17 00:00:00 2001
|
||||
From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||
Date: Fri, 7 Mar 2025 10:33:09 +0100
|
||||
Subject: [PATCH] dt-bindings: rng: rockchip,rk3588-rng: Drop unnecessary
|
||||
status from example
|
||||
|
||||
Device nodes are enabled by default, so no need for 'status = "okay"' in
|
||||
the DTS example.
|
||||
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||
Acked-by: Rob Herring (Arm) <robh@kernel.org>
|
||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
---
|
||||
Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
--- a/Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml
|
||||
+++ b/Documentation/devicetree/bindings/rng/rockchip,rk3588-rng.yaml
|
||||
@@ -53,7 +53,6 @@ examples:
|
||||
interrupts = <GIC_SPI 400 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
clocks = <&scmi_clk SCMI_HCLK_SECURE_NS>;
|
||||
resets = <&scmi_reset SCMI_SRST_H_TRNG_NS>;
|
||||
- status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
From 8bb8609293ff3d8998d75c8db605c0529e83bcd9 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Tue, 4 Feb 2025 16:35:48 +0100
|
||||
Subject: [PATCH] hwrng: rockchip - store dev pointer in driver struct
|
||||
|
||||
The rockchip rng driver does a dance to store the dev pointer in the
|
||||
hwrng's unsigned long "priv" member. However, since the struct hwrng
|
||||
member of rk_rng is not a pointer, we can use container_of to get the
|
||||
struct rk_rng instance from just the struct hwrng*, which means we don't
|
||||
have to subvert what little there is in C of a type system and can
|
||||
instead store a pointer to the device struct in the rk_rng itself.
|
||||
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
---
|
||||
drivers/char/hw_random/rockchip-rng.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/char/hw_random/rockchip-rng.c
|
||||
+++ b/drivers/char/hw_random/rockchip-rng.c
|
||||
@@ -54,6 +54,7 @@ struct rk_rng {
|
||||
void __iomem *base;
|
||||
int clk_num;
|
||||
struct clk_bulk_data *clk_bulks;
|
||||
+ struct device *dev;
|
||||
};
|
||||
|
||||
/* The mask in the upper 16 bits determines the bits that are updated */
|
||||
@@ -70,8 +71,7 @@ static int rk_rng_init(struct hwrng *rng
|
||||
/* start clocks */
|
||||
ret = clk_bulk_prepare_enable(rk_rng->clk_num, rk_rng->clk_bulks);
|
||||
if (ret < 0) {
|
||||
- dev_err((struct device *) rk_rng->rng.priv,
|
||||
- "Failed to enable clks %d\n", ret);
|
||||
+ dev_err(rk_rng->dev, "Failed to enable clocks: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ static int rk_rng_read(struct hwrng *rng
|
||||
u32 reg;
|
||||
int ret = 0;
|
||||
|
||||
- ret = pm_runtime_resume_and_get((struct device *) rk_rng->rng.priv);
|
||||
+ ret = pm_runtime_resume_and_get(rk_rng->dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@@ -122,8 +122,8 @@ static int rk_rng_read(struct hwrng *rng
|
||||
/* Read random data stored in the registers */
|
||||
memcpy_fromio(buf, rk_rng->base + TRNG_RNG_DOUT, to_read);
|
||||
out:
|
||||
- pm_runtime_mark_last_busy((struct device *) rk_rng->rng.priv);
|
||||
- pm_runtime_put_sync_autosuspend((struct device *) rk_rng->rng.priv);
|
||||
+ pm_runtime_mark_last_busy(rk_rng->dev);
|
||||
+ pm_runtime_put_sync_autosuspend(rk_rng->dev);
|
||||
|
||||
return (ret < 0) ? ret : to_read;
|
||||
}
|
||||
@@ -164,7 +164,7 @@ static int rk_rng_probe(struct platform_
|
||||
rk_rng->rng.cleanup = rk_rng_cleanup;
|
||||
}
|
||||
rk_rng->rng.read = rk_rng_read;
|
||||
- rk_rng->rng.priv = (unsigned long) dev;
|
||||
+ rk_rng->dev = dev;
|
||||
rk_rng->rng.quality = 900;
|
||||
|
||||
pm_runtime_set_autosuspend_delay(dev, RK_RNG_AUTOSUSPEND_DELAY);
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
From 24aaa42ed65c0811b598674a593fc653d643a7e6 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Tue, 4 Feb 2025 16:35:49 +0100
|
||||
Subject: [PATCH] hwrng: rockchip - eliminate some unnecessary dereferences
|
||||
|
||||
Despite assigning a temporary variable the value of &pdev->dev early on
|
||||
in the probe function, the probe function then continues to use this
|
||||
construct when it could just use the local dev variable instead.
|
||||
|
||||
Simplify this by using the local dev variable directly.
|
||||
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
---
|
||||
drivers/char/hw_random/rockchip-rng.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/char/hw_random/rockchip-rng.c
|
||||
+++ b/drivers/char/hw_random/rockchip-rng.c
|
||||
@@ -148,7 +148,7 @@ static int rk_rng_probe(struct platform_
|
||||
return dev_err_probe(dev, rk_rng->clk_num,
|
||||
"Failed to get clks property\n");
|
||||
|
||||
- rst = devm_reset_control_array_get_exclusive(&pdev->dev);
|
||||
+ rst = devm_reset_control_array_get_exclusive(dev);
|
||||
if (IS_ERR(rst))
|
||||
return dev_err_probe(dev, PTR_ERR(rst), "Failed to get reset property\n");
|
||||
|
||||
@@ -171,11 +171,11 @@ static int rk_rng_probe(struct platform_
|
||||
pm_runtime_use_autosuspend(dev);
|
||||
ret = devm_pm_runtime_enable(dev);
|
||||
if (ret)
|
||||
- return dev_err_probe(&pdev->dev, ret, "Runtime pm activation failed.\n");
|
||||
+ return dev_err_probe(dev, ret, "Runtime pm activation failed.\n");
|
||||
|
||||
ret = devm_hwrng_register(dev, &rk_rng->rng);
|
||||
if (ret)
|
||||
- return dev_err_probe(&pdev->dev, ret, "Failed to register Rockchip hwrng\n");
|
||||
+ return dev_err_probe(dev, ret, "Failed to register Rockchip hwrng\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
+422
@@ -0,0 +1,422 @@
|
||||
From 8eff8eb83fc0ae8b5f76220e2bb8644d836e99ff Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Tue, 4 Feb 2025 16:35:50 +0100
|
||||
Subject: [PATCH] hwrng: rockchip - add support for rk3588's standalone TRNG
|
||||
|
||||
The RK3588 SoC includes several TRNGs, one part of the Crypto IP block,
|
||||
and the other one (referred to as "trngv1") as a standalone new IP.
|
||||
|
||||
Add support for this new standalone TRNG to the driver by both
|
||||
generalising it to support multiple different rockchip RNGs and then
|
||||
implementing the required functionality for the new hardware.
|
||||
|
||||
This work was partly based on the downstream vendor driver by Rockchip's
|
||||
Lin Jinhan, which is why they are listed as a Co-author.
|
||||
|
||||
While the hardware does support notifying the CPU with an IRQ when the
|
||||
random data is ready, I've discovered while implementing the code to use
|
||||
this interrupt that this results in significantly slower throughput of
|
||||
the TRNG even when under heavy CPU load. I assume this is because with
|
||||
only 32 bytes of data per invocation, the overhead of reinitialising a
|
||||
completion, enabling the interrupt, sleeping and then triggering the
|
||||
completion in the IRQ handler is way more expensive than busylooping.
|
||||
|
||||
Speaking of busylooping, the poll interval for reading the ISTAT is an
|
||||
atomic read with a delay of 0. In my testing, I've found that this gives
|
||||
us the largest throughput, and it appears the random data is ready
|
||||
pretty much the moment we begin polling, as increasing the poll delay
|
||||
leads to a drop in throughput significant enough to not just be due to
|
||||
the poll interval missing the ideal timing by a microsecond or two.
|
||||
|
||||
According to downstream, the IP should take 1024 clock cycles to
|
||||
generate 56 bits of random data, which at 150MHz should work out to
|
||||
6.8us. I did not test whether the data really does take 256/56*6.8us
|
||||
to arrive, though changing the readl to a __raw_readl makes no
|
||||
difference in throughput, and this data does pass the rngtest FIPS
|
||||
checks, so I'm not entirely sure what's going on but I presume it's got
|
||||
something to do with the AHB bus speed and the memory barriers that
|
||||
mainline's readl/writel functions insert.
|
||||
|
||||
The only other current SoC that uses this new IP is the Rockchip RV1106,
|
||||
but that SoC does not have mainline support as of the time of writing,
|
||||
so we make no effort to declare it as supported for now.
|
||||
|
||||
Co-developed-by: Lin Jinhan <troy.lin@rock-chips.com>
|
||||
Signed-off-by: Lin Jinhan <troy.lin@rock-chips.com>
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
---
|
||||
drivers/char/hw_random/Kconfig | 3 +-
|
||||
drivers/char/hw_random/rockchip-rng.c | 234 +++++++++++++++++++++++---
|
||||
2 files changed, 216 insertions(+), 21 deletions(-)
|
||||
|
||||
--- a/drivers/char/hw_random/Kconfig
|
||||
+++ b/drivers/char/hw_random/Kconfig
|
||||
@@ -581,7 +581,8 @@ config HW_RANDOM_ROCKCHIP
|
||||
default HW_RANDOM
|
||||
help
|
||||
This driver provides kernel-side support for the True Random Number
|
||||
- Generator hardware found on some Rockchip SoC like RK3566 or RK3568.
|
||||
+ Generator hardware found on some Rockchip SoCs like RK3566, RK3568
|
||||
+ or RK3588.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called rockchip-rng.
|
||||
--- a/drivers/char/hw_random/rockchip-rng.c
|
||||
+++ b/drivers/char/hw_random/rockchip-rng.c
|
||||
@@ -1,12 +1,14 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
- * rockchip-rng.c True Random Number Generator driver for Rockchip RK3568 SoC
|
||||
+ * rockchip-rng.c True Random Number Generator driver for Rockchip SoCs
|
||||
*
|
||||
* Copyright (c) 2018, Fuzhou Rockchip Electronics Co., Ltd.
|
||||
* Copyright (c) 2022, Aurelien Jarno
|
||||
+ * Copyright (c) 2025, Collabora Ltd.
|
||||
* Authors:
|
||||
* Lin Jinhan <troy.lin@rock-chips.com>
|
||||
* Aurelien Jarno <aurelien@aurel32.net>
|
||||
+ * Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
*/
|
||||
#include <linux/clk.h>
|
||||
#include <linux/hw_random.h>
|
||||
@@ -32,6 +34,9 @@
|
||||
*/
|
||||
#define RK_RNG_SAMPLE_CNT 1000
|
||||
|
||||
+/* after how many bytes of output TRNGv1 implementations should be reseeded */
|
||||
+#define RK_TRNG_V1_AUTO_RESEED_CNT 16000
|
||||
+
|
||||
/* TRNG registers from RK3568 TRM-Part2, section 5.4.1 */
|
||||
#define TRNG_RST_CTL 0x0004
|
||||
#define TRNG_RNG_CTL 0x0400
|
||||
@@ -49,25 +54,85 @@
|
||||
#define TRNG_RNG_SAMPLE_CNT 0x0404
|
||||
#define TRNG_RNG_DOUT 0x0410
|
||||
|
||||
+/*
|
||||
+ * TRNG V1 register definitions
|
||||
+ * The TRNG V1 IP is a stand-alone TRNG implementation (not part of a crypto IP)
|
||||
+ * and can be found in the Rockchip RK3588 SoC
|
||||
+ */
|
||||
+#define TRNG_V1_CTRL 0x0000
|
||||
+#define TRNG_V1_CTRL_NOP 0x00
|
||||
+#define TRNG_V1_CTRL_RAND 0x01
|
||||
+#define TRNG_V1_CTRL_SEED 0x02
|
||||
+
|
||||
+#define TRNG_V1_STAT 0x0004
|
||||
+#define TRNG_V1_STAT_SEEDED BIT(9)
|
||||
+#define TRNG_V1_STAT_GENERATING BIT(30)
|
||||
+#define TRNG_V1_STAT_RESEEDING BIT(31)
|
||||
+
|
||||
+#define TRNG_V1_MODE 0x0008
|
||||
+#define TRNG_V1_MODE_128_BIT (0x00 << 3)
|
||||
+#define TRNG_V1_MODE_256_BIT (0x01 << 3)
|
||||
+
|
||||
+/* Interrupt Enable register; unused because polling is faster */
|
||||
+#define TRNG_V1_IE 0x0010
|
||||
+#define TRNG_V1_IE_GLBL_EN BIT(31)
|
||||
+#define TRNG_V1_IE_SEED_DONE_EN BIT(1)
|
||||
+#define TRNG_V1_IE_RAND_RDY_EN BIT(0)
|
||||
+
|
||||
+#define TRNG_V1_ISTAT 0x0014
|
||||
+#define TRNG_V1_ISTAT_RAND_RDY BIT(0)
|
||||
+
|
||||
+/* RAND0 ~ RAND7 */
|
||||
+#define TRNG_V1_RAND0 0x0020
|
||||
+#define TRNG_V1_RAND7 0x003C
|
||||
+
|
||||
+/* Auto Reseed Register */
|
||||
+#define TRNG_V1_AUTO_RQSTS 0x0060
|
||||
+
|
||||
+#define TRNG_V1_VERSION 0x00F0
|
||||
+#define TRNG_v1_VERSION_CODE 0x46bc
|
||||
+/* end of TRNG_V1 register definitions */
|
||||
+
|
||||
+/* Before removing this assert, give rk3588_rng_read an upper bound of 32 */
|
||||
+static_assert(RK_RNG_MAX_BYTE <= (TRNG_V1_RAND7 + 4 - TRNG_V1_RAND0),
|
||||
+ "You raised RK_RNG_MAX_BYTE and broke rk3588-rng, congrats.");
|
||||
+
|
||||
struct rk_rng {
|
||||
struct hwrng rng;
|
||||
void __iomem *base;
|
||||
int clk_num;
|
||||
struct clk_bulk_data *clk_bulks;
|
||||
+ const struct rk_rng_soc_data *soc_data;
|
||||
struct device *dev;
|
||||
};
|
||||
|
||||
+struct rk_rng_soc_data {
|
||||
+ int (*rk_rng_init)(struct hwrng *rng);
|
||||
+ int (*rk_rng_read)(struct hwrng *rng, void *buf, size_t max, bool wait);
|
||||
+ void (*rk_rng_cleanup)(struct hwrng *rng);
|
||||
+ unsigned short quality;
|
||||
+ bool reset_optional;
|
||||
+};
|
||||
+
|
||||
/* The mask in the upper 16 bits determines the bits that are updated */
|
||||
static void rk_rng_write_ctl(struct rk_rng *rng, u32 val, u32 mask)
|
||||
{
|
||||
writel((mask << 16) | val, rng->base + TRNG_RNG_CTL);
|
||||
}
|
||||
|
||||
-static int rk_rng_init(struct hwrng *rng)
|
||||
+static inline void rk_rng_writel(struct rk_rng *rng, u32 val, u32 offset)
|
||||
{
|
||||
- struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
- int ret;
|
||||
+ writel(val, rng->base + offset);
|
||||
+}
|
||||
|
||||
+static inline u32 rk_rng_readl(struct rk_rng *rng, u32 offset)
|
||||
+{
|
||||
+ return readl(rng->base + offset);
|
||||
+}
|
||||
+
|
||||
+static int rk_rng_enable_clks(struct rk_rng *rk_rng)
|
||||
+{
|
||||
+ int ret;
|
||||
/* start clocks */
|
||||
ret = clk_bulk_prepare_enable(rk_rng->clk_num, rk_rng->clk_bulks);
|
||||
if (ret < 0) {
|
||||
@@ -75,6 +140,18 @@ static int rk_rng_init(struct hwrng *rng
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int rk3568_rng_init(struct hwrng *rng)
|
||||
+{
|
||||
+ struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = rk_rng_enable_clks(rk_rng);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+
|
||||
/* set the sample period */
|
||||
writel(RK_RNG_SAMPLE_CNT, rk_rng->base + TRNG_RNG_SAMPLE_CNT);
|
||||
|
||||
@@ -87,7 +164,7 @@ static int rk_rng_init(struct hwrng *rng
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void rk_rng_cleanup(struct hwrng *rng)
|
||||
+static void rk3568_rng_cleanup(struct hwrng *rng)
|
||||
{
|
||||
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
|
||||
@@ -98,7 +175,7 @@ static void rk_rng_cleanup(struct hwrng
|
||||
clk_bulk_disable_unprepare(rk_rng->clk_num, rk_rng->clk_bulks);
|
||||
}
|
||||
|
||||
-static int rk_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
+static int rk3568_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
{
|
||||
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
size_t to_read = min_t(size_t, max, RK_RNG_MAX_BYTE);
|
||||
@@ -128,6 +205,114 @@ out:
|
||||
return (ret < 0) ? ret : to_read;
|
||||
}
|
||||
|
||||
+static int rk3588_rng_init(struct hwrng *rng)
|
||||
+{
|
||||
+ struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
+ u32 version, status, mask, istat;
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = rk_rng_enable_clks(rk_rng);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+
|
||||
+ version = rk_rng_readl(rk_rng, TRNG_V1_VERSION);
|
||||
+ if (version != TRNG_v1_VERSION_CODE) {
|
||||
+ dev_err(rk_rng->dev,
|
||||
+ "wrong trng version, expected = %08x, actual = %08x\n",
|
||||
+ TRNG_V1_VERSION, version);
|
||||
+ ret = -EFAULT;
|
||||
+ goto err_disable_clk;
|
||||
+ }
|
||||
+
|
||||
+ mask = TRNG_V1_STAT_SEEDED | TRNG_V1_STAT_GENERATING |
|
||||
+ TRNG_V1_STAT_RESEEDING;
|
||||
+ if (readl_poll_timeout(rk_rng->base + TRNG_V1_STAT, status,
|
||||
+ (status & mask) == TRNG_V1_STAT_SEEDED,
|
||||
+ RK_RNG_POLL_PERIOD_US, RK_RNG_POLL_TIMEOUT_US) < 0) {
|
||||
+ dev_err(rk_rng->dev, "timed out waiting for hwrng to reseed\n");
|
||||
+ ret = -ETIMEDOUT;
|
||||
+ goto err_disable_clk;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * clear ISTAT flag, downstream advises to do this to avoid
|
||||
+ * auto-reseeding "on power on"
|
||||
+ */
|
||||
+ istat = rk_rng_readl(rk_rng, TRNG_V1_ISTAT);
|
||||
+ rk_rng_writel(rk_rng, istat, TRNG_V1_ISTAT);
|
||||
+
|
||||
+ /* auto reseed after RK_TRNG_V1_AUTO_RESEED_CNT bytes */
|
||||
+ rk_rng_writel(rk_rng, RK_TRNG_V1_AUTO_RESEED_CNT / 16, TRNG_V1_AUTO_RQSTS);
|
||||
+
|
||||
+ return 0;
|
||||
+err_disable_clk:
|
||||
+ clk_bulk_disable_unprepare(rk_rng->clk_num, rk_rng->clk_bulks);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static void rk3588_rng_cleanup(struct hwrng *rng)
|
||||
+{
|
||||
+ struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
+
|
||||
+ clk_bulk_disable_unprepare(rk_rng->clk_num, rk_rng->clk_bulks);
|
||||
+}
|
||||
+
|
||||
+static int rk3588_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
+{
|
||||
+ struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
+ size_t to_read = min_t(size_t, max, RK_RNG_MAX_BYTE);
|
||||
+ int ret = 0;
|
||||
+ u32 reg;
|
||||
+
|
||||
+ ret = pm_runtime_resume_and_get(rk_rng->dev);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Clear ISTAT, even without interrupts enabled, this will be updated */
|
||||
+ reg = rk_rng_readl(rk_rng, TRNG_V1_ISTAT);
|
||||
+ rk_rng_writel(rk_rng, reg, TRNG_V1_ISTAT);
|
||||
+
|
||||
+ /* generate 256 bits of random data */
|
||||
+ rk_rng_writel(rk_rng, TRNG_V1_MODE_256_BIT, TRNG_V1_MODE);
|
||||
+ rk_rng_writel(rk_rng, TRNG_V1_CTRL_RAND, TRNG_V1_CTRL);
|
||||
+
|
||||
+ ret = readl_poll_timeout_atomic(rk_rng->base + TRNG_V1_ISTAT, reg,
|
||||
+ (reg & TRNG_V1_ISTAT_RAND_RDY), 0,
|
||||
+ RK_RNG_POLL_TIMEOUT_US);
|
||||
+ if (ret < 0)
|
||||
+ goto out;
|
||||
+
|
||||
+ /* Read random data that's in registers TRNG_V1_RAND0 through RAND7 */
|
||||
+ memcpy_fromio(buf, rk_rng->base + TRNG_V1_RAND0, to_read);
|
||||
+
|
||||
+out:
|
||||
+ /* Clear ISTAT */
|
||||
+ rk_rng_writel(rk_rng, reg, TRNG_V1_ISTAT);
|
||||
+ /* close the TRNG */
|
||||
+ rk_rng_writel(rk_rng, TRNG_V1_CTRL_NOP, TRNG_V1_CTRL);
|
||||
+
|
||||
+ pm_runtime_mark_last_busy(rk_rng->dev);
|
||||
+ pm_runtime_put_sync_autosuspend(rk_rng->dev);
|
||||
+
|
||||
+ return (ret < 0) ? ret : to_read;
|
||||
+}
|
||||
+
|
||||
+static const struct rk_rng_soc_data rk3568_soc_data = {
|
||||
+ .rk_rng_init = rk3568_rng_init,
|
||||
+ .rk_rng_read = rk3568_rng_read,
|
||||
+ .rk_rng_cleanup = rk3568_rng_cleanup,
|
||||
+ .quality = 900,
|
||||
+ .reset_optional = false,
|
||||
+};
|
||||
+
|
||||
+static const struct rk_rng_soc_data rk3588_soc_data = {
|
||||
+ .rk_rng_init = rk3588_rng_init,
|
||||
+ .rk_rng_read = rk3588_rng_read,
|
||||
+ .rk_rng_cleanup = rk3588_rng_cleanup,
|
||||
+ .quality = 999, /* as determined by actual testing */
|
||||
+ .reset_optional = true,
|
||||
+};
|
||||
+
|
||||
static int rk_rng_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
@@ -139,6 +324,7 @@ static int rk_rng_probe(struct platform_
|
||||
if (!rk_rng)
|
||||
return -ENOMEM;
|
||||
|
||||
+ rk_rng->soc_data = of_device_get_match_data(dev);
|
||||
rk_rng->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(rk_rng->base))
|
||||
return PTR_ERR(rk_rng->base);
|
||||
@@ -148,24 +334,30 @@ static int rk_rng_probe(struct platform_
|
||||
return dev_err_probe(dev, rk_rng->clk_num,
|
||||
"Failed to get clks property\n");
|
||||
|
||||
- rst = devm_reset_control_array_get_exclusive(dev);
|
||||
- if (IS_ERR(rst))
|
||||
- return dev_err_probe(dev, PTR_ERR(rst), "Failed to get reset property\n");
|
||||
-
|
||||
- reset_control_assert(rst);
|
||||
- udelay(2);
|
||||
- reset_control_deassert(rst);
|
||||
+ if (rk_rng->soc_data->reset_optional)
|
||||
+ rst = devm_reset_control_array_get_optional_exclusive(dev);
|
||||
+ else
|
||||
+ rst = devm_reset_control_array_get_exclusive(dev);
|
||||
+
|
||||
+ if (rst) {
|
||||
+ if (IS_ERR(rst))
|
||||
+ return dev_err_probe(dev, PTR_ERR(rst), "Failed to get reset property\n");
|
||||
+
|
||||
+ reset_control_assert(rst);
|
||||
+ udelay(2);
|
||||
+ reset_control_deassert(rst);
|
||||
+ }
|
||||
|
||||
platform_set_drvdata(pdev, rk_rng);
|
||||
|
||||
rk_rng->rng.name = dev_driver_string(dev);
|
||||
if (!IS_ENABLED(CONFIG_PM)) {
|
||||
- rk_rng->rng.init = rk_rng_init;
|
||||
- rk_rng->rng.cleanup = rk_rng_cleanup;
|
||||
+ rk_rng->rng.init = rk_rng->soc_data->rk_rng_init;
|
||||
+ rk_rng->rng.cleanup = rk_rng->soc_data->rk_rng_cleanup;
|
||||
}
|
||||
- rk_rng->rng.read = rk_rng_read;
|
||||
+ rk_rng->rng.read = rk_rng->soc_data->rk_rng_read;
|
||||
rk_rng->dev = dev;
|
||||
- rk_rng->rng.quality = 900;
|
||||
+ rk_rng->rng.quality = rk_rng->soc_data->quality;
|
||||
|
||||
pm_runtime_set_autosuspend_delay(dev, RK_RNG_AUTOSUSPEND_DELAY);
|
||||
pm_runtime_use_autosuspend(dev);
|
||||
@@ -184,7 +376,7 @@ static int __maybe_unused rk_rng_runtime
|
||||
{
|
||||
struct rk_rng *rk_rng = dev_get_drvdata(dev);
|
||||
|
||||
- rk_rng_cleanup(&rk_rng->rng);
|
||||
+ rk_rng->soc_data->rk_rng_cleanup(&rk_rng->rng);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -193,7 +385,7 @@ static int __maybe_unused rk_rng_runtime
|
||||
{
|
||||
struct rk_rng *rk_rng = dev_get_drvdata(dev);
|
||||
|
||||
- return rk_rng_init(&rk_rng->rng);
|
||||
+ return rk_rng->soc_data->rk_rng_init(&rk_rng->rng);
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops rk_rng_pm_ops = {
|
||||
@@ -204,7 +396,8 @@ static const struct dev_pm_ops rk_rng_pm
|
||||
};
|
||||
|
||||
static const struct of_device_id rk_rng_dt_match[] = {
|
||||
- { .compatible = "rockchip,rk3568-rng", },
|
||||
+ { .compatible = "rockchip,rk3568-rng", .data = (void *)&rk3568_soc_data },
|
||||
+ { .compatible = "rockchip,rk3588-rng", .data = (void *)&rk3588_soc_data },
|
||||
{ /* sentinel */ },
|
||||
};
|
||||
|
||||
@@ -221,8 +414,9 @@ static struct platform_driver rk_rng_dri
|
||||
|
||||
module_platform_driver(rk_rng_driver);
|
||||
|
||||
-MODULE_DESCRIPTION("Rockchip RK3568 True Random Number Generator driver");
|
||||
+MODULE_DESCRIPTION("Rockchip True Random Number Generator driver");
|
||||
MODULE_AUTHOR("Lin Jinhan <troy.lin@rock-chips.com>");
|
||||
MODULE_AUTHOR("Aurelien Jarno <aurelien@aurel32.net>");
|
||||
MODULE_AUTHOR("Daniel Golle <daniel@makrotopia.org>");
|
||||
+MODULE_AUTHOR("Nicolas Frattaroli <nicolas.frattaroli@collabora.com>");
|
||||
MODULE_LICENSE("GPL");
|
||||
+164
@@ -0,0 +1,164 @@
|
||||
From 8f66ccbd8f67ab41b29f54f383f8a8516be7696c Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Wed, 30 Apr 2025 18:16:35 +0200
|
||||
Subject: [PATCH] hwrng: rockchip - add support for RK3576's RNG
|
||||
|
||||
The Rockchip RK3576 SoC uses a new hardware random number generator IP.
|
||||
It's also used on the Rockchip RK3562 and the Rockchip RK3528.
|
||||
|
||||
It has several modes of operation and self-checking features that are
|
||||
not implemented here. For starters, it has a DRNG output, which is an
|
||||
AES-CTR pseudo-random number generator that can be reseeded from the
|
||||
true entropy regularly.
|
||||
|
||||
However, it also allows for access of the true entropy generator
|
||||
directly. This entropy is generated from an oscillator.
|
||||
|
||||
There are several configuration registers which we don't touch here. The
|
||||
oscillator can be switched between a "CRO" and "STR" oscillator, and the
|
||||
length of the oscillator can be configured.
|
||||
|
||||
The hardware also supports some automatic continuous entropy quality
|
||||
checking, which is also not implemented in this driver for the time
|
||||
being.
|
||||
|
||||
The output as-is has been deemed sufficient to be useful:
|
||||
|
||||
rngtest: starting FIPS tests...
|
||||
rngtest: bits received from input: 20000032
|
||||
rngtest: FIPS 140-2 successes: 997
|
||||
rngtest: FIPS 140-2 failures: 3
|
||||
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
|
||||
rngtest: FIPS 140-2(2001-10-10) Poker: 1
|
||||
rngtest: FIPS 140-2(2001-10-10) Runs: 1
|
||||
rngtest: FIPS 140-2(2001-10-10) Long run: 1
|
||||
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
|
||||
rngtest: input channel speed: (min=17.050; avg=1897.272;
|
||||
max=19531250.000)Kibits/s
|
||||
rngtest: FIPS tests speed: (min=44.773; avg=71.179; max=96.820)Mibits/s
|
||||
rngtest: Program run time: 11760715 microseconds
|
||||
rngtest: bits received from input: 40000032
|
||||
rngtest: FIPS 140-2 successes: 1997
|
||||
rngtest: FIPS 140-2 failures: 3
|
||||
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
|
||||
rngtest: FIPS 140-2(2001-10-10) Poker: 1
|
||||
rngtest: FIPS 140-2(2001-10-10) Runs: 1
|
||||
rngtest: FIPS 140-2(2001-10-10) Long run: 1
|
||||
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
|
||||
rngtest: input channel speed: (min=17.050; avg=1798.618;
|
||||
max=19531250.000)Kibits/s
|
||||
rngtest: FIPS tests speed: (min=44.773; avg=64.561; max=96.820)Mibits/s
|
||||
rngtest: Program run time: 23507723 microseconds
|
||||
|
||||
Stretching the entropy can then be left up to Linux's actual entropy
|
||||
pool.
|
||||
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
---
|
||||
drivers/char/hw_random/rockchip-rng.c | 73 +++++++++++++++++++++++++++
|
||||
1 file changed, 73 insertions(+)
|
||||
|
||||
--- a/drivers/char/hw_random/rockchip-rng.c
|
||||
+++ b/drivers/char/hw_random/rockchip-rng.c
|
||||
@@ -93,6 +93,30 @@
|
||||
#define TRNG_v1_VERSION_CODE 0x46bc
|
||||
/* end of TRNG_V1 register definitions */
|
||||
|
||||
+/*
|
||||
+ * RKRNG register definitions
|
||||
+ * The RKRNG IP is a stand-alone TRNG implementation (not part of a crypto IP)
|
||||
+ * and can be found in the Rockchip RK3576, Rockchip RK3562 and Rockchip RK3528
|
||||
+ * SoCs. It can either output true randomness (TRNG) or "deterministic"
|
||||
+ * randomness derived from hashing the true entropy (DRNG). This driver
|
||||
+ * implementation uses just the true entropy, and leaves stretching the entropy
|
||||
+ * up to Linux.
|
||||
+ */
|
||||
+#define RKRNG_CFG 0x0000
|
||||
+#define RKRNG_CTRL 0x0010
|
||||
+#define RKRNG_CTRL_REQ_TRNG BIT(4)
|
||||
+#define RKRNG_STATE 0x0014
|
||||
+#define RKRNG_STATE_TRNG_RDY BIT(4)
|
||||
+#define RKRNG_TRNG_DATA0 0x0050
|
||||
+#define RKRNG_TRNG_DATA1 0x0054
|
||||
+#define RKRNG_TRNG_DATA2 0x0058
|
||||
+#define RKRNG_TRNG_DATA3 0x005C
|
||||
+#define RKRNG_TRNG_DATA4 0x0060
|
||||
+#define RKRNG_TRNG_DATA5 0x0064
|
||||
+#define RKRNG_TRNG_DATA6 0x0068
|
||||
+#define RKRNG_TRNG_DATA7 0x006C
|
||||
+#define RKRNG_READ_LEN 32
|
||||
+
|
||||
/* Before removing this assert, give rk3588_rng_read an upper bound of 32 */
|
||||
static_assert(RK_RNG_MAX_BYTE <= (TRNG_V1_RAND7 + 4 - TRNG_V1_RAND0),
|
||||
"You raised RK_RNG_MAX_BYTE and broke rk3588-rng, congrats.");
|
||||
@@ -205,6 +229,46 @@ out:
|
||||
return (ret < 0) ? ret : to_read;
|
||||
}
|
||||
|
||||
+static int rk3576_rng_init(struct hwrng *rng)
|
||||
+{
|
||||
+ struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
+
|
||||
+ return rk_rng_enable_clks(rk_rng);
|
||||
+}
|
||||
+
|
||||
+static int rk3576_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
+{
|
||||
+ struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
+ size_t to_read = min_t(size_t, max, RKRNG_READ_LEN);
|
||||
+ int ret = 0;
|
||||
+ u32 val;
|
||||
+
|
||||
+ ret = pm_runtime_resume_and_get(rk_rng->dev);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+
|
||||
+ rk_rng_writel(rk_rng, RKRNG_CTRL_REQ_TRNG | (RKRNG_CTRL_REQ_TRNG << 16),
|
||||
+ RKRNG_CTRL);
|
||||
+
|
||||
+ if (readl_poll_timeout(rk_rng->base + RKRNG_STATE, val,
|
||||
+ (val & RKRNG_STATE_TRNG_RDY), RK_RNG_POLL_PERIOD_US,
|
||||
+ RK_RNG_POLL_TIMEOUT_US)) {
|
||||
+ dev_err(rk_rng->dev, "timed out waiting for data\n");
|
||||
+ ret = -ETIMEDOUT;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ rk_rng_writel(rk_rng, RKRNG_STATE_TRNG_RDY, RKRNG_STATE);
|
||||
+
|
||||
+ memcpy_fromio(buf, rk_rng->base + RKRNG_TRNG_DATA0, to_read);
|
||||
+
|
||||
+out:
|
||||
+ pm_runtime_mark_last_busy(rk_rng->dev);
|
||||
+ pm_runtime_put_sync_autosuspend(rk_rng->dev);
|
||||
+
|
||||
+ return (ret < 0) ? ret : to_read;
|
||||
+}
|
||||
+
|
||||
static int rk3588_rng_init(struct hwrng *rng)
|
||||
{
|
||||
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
@@ -305,6 +369,14 @@ static const struct rk_rng_soc_data rk35
|
||||
.reset_optional = false,
|
||||
};
|
||||
|
||||
+static const struct rk_rng_soc_data rk3576_soc_data = {
|
||||
+ .rk_rng_init = rk3576_rng_init,
|
||||
+ .rk_rng_read = rk3576_rng_read,
|
||||
+ .rk_rng_cleanup = rk3588_rng_cleanup,
|
||||
+ .quality = 999, /* as determined by actual testing */
|
||||
+ .reset_optional = true,
|
||||
+};
|
||||
+
|
||||
static const struct rk_rng_soc_data rk3588_soc_data = {
|
||||
.rk_rng_init = rk3588_rng_init,
|
||||
.rk_rng_read = rk3588_rng_read,
|
||||
@@ -397,6 +469,7 @@ static const struct dev_pm_ops rk_rng_pm
|
||||
|
||||
static const struct of_device_id rk_rng_dt_match[] = {
|
||||
{ .compatible = "rockchip,rk3568-rng", .data = (void *)&rk3568_soc_data },
|
||||
+ { .compatible = "rockchip,rk3576-rng", .data = (void *)&rk3576_soc_data },
|
||||
{ .compatible = "rockchip,rk3588-rng", .data = (void *)&rk3588_soc_data },
|
||||
{ /* sentinel */ },
|
||||
};
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
From 9e89f02da718bc912f7f253b58804d4a52efed30 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Wed, 11 Dec 2024 17:58:50 +0100
|
||||
Subject: [PATCH] clk: rockchip: support clocks registered late
|
||||
|
||||
When some clocks are registered late and some clocks are registered
|
||||
early we need to make sure the late registered clocks report probe defer
|
||||
until the final registration has happened.
|
||||
|
||||
But we do not want to keep reporting probe defer after the late
|
||||
registration has happened. Also not all Rockchip SoCs have late
|
||||
registered clocks and may not need to report probe defer at all.
|
||||
|
||||
This restructures code a bit, so that there is a new function
|
||||
rockchip_clk_init_early(), which should be used for initializing the CRU
|
||||
structure on SoCs making use of late initialization in addition to the
|
||||
early init. These platforms should call rockchip_clk_finalize()
|
||||
once all clocks have been registered.
|
||||
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
[added EXPORT_SYMBOL_GPL(rockchip_clk_finalize) to match the early function]
|
||||
Link: https://lore.kernel.org/r/20241211165957.94922-2-sebastian.reichel@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk.c | 36 ++++++++++++++++++++++++++++++++----
|
||||
drivers/clk/rockchip/clk.h | 3 +++
|
||||
2 files changed, 35 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk.c
|
||||
+++ b/drivers/clk/rockchip/clk.c
|
||||
@@ -359,14 +359,17 @@ static struct clk *rockchip_clk_register
|
||||
return hw->clk;
|
||||
}
|
||||
|
||||
-struct rockchip_clk_provider *rockchip_clk_init(struct device_node *np,
|
||||
- void __iomem *base,
|
||||
- unsigned long nr_clks)
|
||||
+static struct rockchip_clk_provider *rockchip_clk_init_base(
|
||||
+ struct device_node *np, void __iomem *base,
|
||||
+ unsigned long nr_clks, bool has_late_clocks)
|
||||
{
|
||||
struct rockchip_clk_provider *ctx;
|
||||
struct clk **clk_table;
|
||||
+ struct clk *default_clk_val;
|
||||
int i;
|
||||
|
||||
+ default_clk_val = ERR_PTR(has_late_clocks ? -EPROBE_DEFER : -ENOENT);
|
||||
+
|
||||
ctx = kzalloc(sizeof(struct rockchip_clk_provider), GFP_KERNEL);
|
||||
if (!ctx)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
@@ -376,7 +379,7 @@ struct rockchip_clk_provider *rockchip_c
|
||||
goto err_free;
|
||||
|
||||
for (i = 0; i < nr_clks; ++i)
|
||||
- clk_table[i] = ERR_PTR(-ENOENT);
|
||||
+ clk_table[i] = default_clk_val;
|
||||
|
||||
ctx->reg_base = base;
|
||||
ctx->clk_data.clks = clk_table;
|
||||
@@ -393,8 +396,33 @@ err_free:
|
||||
kfree(ctx);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
+
|
||||
+struct rockchip_clk_provider *rockchip_clk_init(struct device_node *np,
|
||||
+ void __iomem *base,
|
||||
+ unsigned long nr_clks)
|
||||
+{
|
||||
+ return rockchip_clk_init_base(np, base, nr_clks, false);
|
||||
+}
|
||||
EXPORT_SYMBOL_GPL(rockchip_clk_init);
|
||||
|
||||
+struct rockchip_clk_provider *rockchip_clk_init_early(struct device_node *np,
|
||||
+ void __iomem *base,
|
||||
+ unsigned long nr_clks)
|
||||
+{
|
||||
+ return rockchip_clk_init_base(np, base, nr_clks, true);
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(rockchip_clk_init_early);
|
||||
+
|
||||
+void rockchip_clk_finalize(struct rockchip_clk_provider *ctx)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < ctx->clk_data.clk_num; ++i)
|
||||
+ if (ctx->clk_data.clks[i] == ERR_PTR(-EPROBE_DEFER))
|
||||
+ ctx->clk_data.clks[i] = ERR_PTR(-ENOENT);
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(rockchip_clk_finalize);
|
||||
+
|
||||
void rockchip_clk_of_add_provider(struct device_node *np,
|
||||
struct rockchip_clk_provider *ctx)
|
||||
{
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -1024,6 +1024,9 @@ struct rockchip_clk_branch {
|
||||
|
||||
struct rockchip_clk_provider *rockchip_clk_init(struct device_node *np,
|
||||
void __iomem *base, unsigned long nr_clks);
|
||||
+struct rockchip_clk_provider *rockchip_clk_init_early(struct device_node *np,
|
||||
+ void __iomem *base, unsigned long nr_clks);
|
||||
+void rockchip_clk_finalize(struct rockchip_clk_provider *ctx);
|
||||
void rockchip_clk_of_add_provider(struct device_node *np,
|
||||
struct rockchip_clk_provider *ctx);
|
||||
unsigned long rockchip_clk_find_max_clk_id(struct rockchip_clk_branch *list,
|
||||
+150
@@ -0,0 +1,150 @@
|
||||
From 33af96244a66f855baa43d424844bb437c79c30c Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Wed, 11 Dec 2024 17:58:51 +0100
|
||||
Subject: [PATCH] clk: rockchip: rk3588: register GATE_LINK later
|
||||
|
||||
The proper GATE_LINK implementation will use runtime PM to handle the
|
||||
linked gate clocks, which requires device context. Currently all clocks
|
||||
are registered early via CLK_OF_DECLARE, which is before the kernel
|
||||
knows about devices.
|
||||
|
||||
Moving the full clocks registration to the probe routine does not work,
|
||||
since the clocks needed for timers must be registered early.
|
||||
|
||||
To work around this issue, most of the clock tree is registered early,
|
||||
but GATE_LINK clocks are handled in the probe routine. Since the resets
|
||||
are not needed early either, they have also been moved to the probe
|
||||
routine.
|
||||
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20241211165957.94922-3-sebastian.reichel@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3588.c | 66 +++++++++++++++++++++++++++----
|
||||
1 file changed, 58 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3588.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3588.c
|
||||
@@ -266,6 +266,8 @@ static struct rockchip_pll_rate_table rk
|
||||
}, \
|
||||
}
|
||||
|
||||
+static struct rockchip_clk_provider *early_ctx;
|
||||
+
|
||||
static struct rockchip_cpuclk_rate_table rk3588_cpub0clk_rates[] __initdata = {
|
||||
RK3588_CPUB01CLK_RATE(2496000000, 1),
|
||||
RK3588_CPUB01CLK_RATE(2400000000, 1),
|
||||
@@ -694,7 +696,7 @@ static struct rockchip_pll_clock rk3588_
|
||||
RK3588_MODE_CON0, 10, 15, 0, rk3588_pll_rates),
|
||||
};
|
||||
|
||||
-static struct rockchip_clk_branch rk3588_clk_branches[] __initdata = {
|
||||
+static struct rockchip_clk_branch rk3588_early_clk_branches[] __initdata = {
|
||||
/*
|
||||
* CRU Clock-Architecture
|
||||
*/
|
||||
@@ -2428,7 +2430,9 @@ static struct rockchip_clk_branch rk3588
|
||||
RK3588_CLKGATE_CON(68), 5, GFLAGS),
|
||||
GATE(ACLK_AV1, "aclk_av1", "aclk_av1_pre", 0,
|
||||
RK3588_CLKGATE_CON(68), 2, GFLAGS),
|
||||
+};
|
||||
|
||||
+static struct rockchip_clk_branch rk3588_clk_branches[] = {
|
||||
GATE_LINK(ACLK_ISP1_PRE, "aclk_isp1_pre", "aclk_isp1_root", ACLK_VI_ROOT, 0, RK3588_CLKGATE_CON(26), 6, GFLAGS),
|
||||
GATE_LINK(HCLK_ISP1_PRE, "hclk_isp1_pre", "hclk_isp1_root", HCLK_VI_ROOT, 0, RK3588_CLKGATE_CON(26), 8, GFLAGS),
|
||||
GATE_LINK(HCLK_NVM, "hclk_nvm", "hclk_nvm_root", ACLK_NVM_ROOT, RK3588_LINKED_CLK, RK3588_CLKGATE_CON(31), 2, GFLAGS),
|
||||
@@ -2453,26 +2457,31 @@ static struct rockchip_clk_branch rk3588
|
||||
GATE_LINK(PCLK_VO1GRF, "pclk_vo1grf", "pclk_vo1_root", HCLK_VO1, CLK_IGNORE_UNUSED, RK3588_CLKGATE_CON(59), 12, GFLAGS),
|
||||
};
|
||||
|
||||
-static void __init rk3588_clk_init(struct device_node *np)
|
||||
+static void __init rk3588_clk_early_init(struct device_node *np)
|
||||
{
|
||||
struct rockchip_clk_provider *ctx;
|
||||
- unsigned long clk_nr_clks;
|
||||
+ unsigned long clk_nr_clks, max_clk_id1, max_clk_id2;
|
||||
void __iomem *reg_base;
|
||||
|
||||
- clk_nr_clks = rockchip_clk_find_max_clk_id(rk3588_clk_branches,
|
||||
- ARRAY_SIZE(rk3588_clk_branches)) + 1;
|
||||
+ max_clk_id1 = rockchip_clk_find_max_clk_id(rk3588_clk_branches,
|
||||
+ ARRAY_SIZE(rk3588_clk_branches));
|
||||
+ max_clk_id2 = rockchip_clk_find_max_clk_id(rk3588_early_clk_branches,
|
||||
+ ARRAY_SIZE(rk3588_early_clk_branches));
|
||||
+ clk_nr_clks = max(max_clk_id1, max_clk_id2) + 1;
|
||||
+
|
||||
reg_base = of_iomap(np, 0);
|
||||
if (!reg_base) {
|
||||
pr_err("%s: could not map cru region\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
- ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
|
||||
+ ctx = rockchip_clk_init_early(np, reg_base, clk_nr_clks);
|
||||
if (IS_ERR(ctx)) {
|
||||
pr_err("%s: rockchip clk init failed\n", __func__);
|
||||
iounmap(reg_base);
|
||||
return;
|
||||
}
|
||||
+ early_ctx = ctx;
|
||||
|
||||
rockchip_clk_register_plls(ctx, rk3588_pll_clks,
|
||||
ARRAY_SIZE(rk3588_pll_clks),
|
||||
@@ -2491,14 +2500,55 @@ static void __init rk3588_clk_init(struc
|
||||
&rk3588_cpub1clk_data, rk3588_cpub1clk_rates,
|
||||
ARRAY_SIZE(rk3588_cpub1clk_rates));
|
||||
|
||||
+ rockchip_clk_register_branches(ctx, rk3588_early_clk_branches,
|
||||
+ ARRAY_SIZE(rk3588_early_clk_branches));
|
||||
+
|
||||
+ rockchip_clk_of_add_provider(np, ctx);
|
||||
+}
|
||||
+CLK_OF_DECLARE_DRIVER(rk3588_cru, "rockchip,rk3588-cru", rk3588_clk_early_init);
|
||||
+
|
||||
+static int clk_rk3588_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct rockchip_clk_provider *ctx = early_ctx;
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ struct device_node *np = dev->of_node;
|
||||
+
|
||||
rockchip_clk_register_branches(ctx, rk3588_clk_branches,
|
||||
ARRAY_SIZE(rk3588_clk_branches));
|
||||
|
||||
- rk3588_rst_init(np, reg_base);
|
||||
+ rockchip_clk_finalize(ctx);
|
||||
|
||||
+ rk3588_rst_init(np, ctx->reg_base);
|
||||
rockchip_register_restart_notifier(ctx, RK3588_GLB_SRST_FST, NULL);
|
||||
|
||||
+ /*
|
||||
+ * Re-add clock provider, so that the newly added clocks are also
|
||||
+ * re-parented and get their defaults configured.
|
||||
+ */
|
||||
+ of_clk_del_provider(np);
|
||||
rockchip_clk_of_add_provider(np, ctx);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
-CLK_OF_DECLARE(rk3588_cru, "rockchip,rk3588-cru", rk3588_clk_init);
|
||||
+static const struct of_device_id clk_rk3588_match_table[] = {
|
||||
+ {
|
||||
+ .compatible = "rockchip,rk3588-cru",
|
||||
+ },
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static struct platform_driver clk_rk3588_driver = {
|
||||
+ .probe = clk_rk3588_probe,
|
||||
+ .driver = {
|
||||
+ .name = "clk-rk3588",
|
||||
+ .of_match_table = clk_rk3588_match_table,
|
||||
+ .suppress_bind_attrs = true,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static int __init rockchip_clk_rk3588_drv_register(void)
|
||||
+{
|
||||
+ return platform_driver_register(&clk_rk3588_driver);
|
||||
+}
|
||||
+core_initcall(rockchip_clk_rk3588_drv_register);
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
From fe0fb6675fa48cade97d8bcd46226479c4a704df Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Wed, 11 Dec 2024 17:58:52 +0100
|
||||
Subject: [PATCH] clk: rockchip: expose rockchip_clk_set_lookup
|
||||
|
||||
Move rockchip_clk_add_lookup to clk.h, so that it can be used
|
||||
by sub-devices with their own driver. These might also have to
|
||||
do a lookup, so rename the function to rockchip_clk_set_lookup
|
||||
and add a matching rockchip_clk_get_lookup.
|
||||
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20241211165957.94922-4-sebastian.reichel@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk.c | 14 ++++----------
|
||||
drivers/clk/rockchip/clk.h | 12 ++++++++++++
|
||||
2 files changed, 16 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk.c
|
||||
+++ b/drivers/clk/rockchip/clk.c
|
||||
@@ -197,12 +197,6 @@ static void rockchip_fractional_approxim
|
||||
clk_fractional_divider_general_approximation(hw, rate, parent_rate, m, n);
|
||||
}
|
||||
|
||||
-static void rockchip_clk_add_lookup(struct rockchip_clk_provider *ctx,
|
||||
- struct clk *clk, unsigned int id)
|
||||
-{
|
||||
- ctx->clk_data.clks[id] = clk;
|
||||
-}
|
||||
-
|
||||
static struct clk *rockchip_clk_register_frac_branch(
|
||||
struct rockchip_clk_provider *ctx, const char *name,
|
||||
const char *const *parent_names, u8 num_parents,
|
||||
@@ -292,7 +286,7 @@ static struct clk *rockchip_clk_register
|
||||
return mux_clk;
|
||||
}
|
||||
|
||||
- rockchip_clk_add_lookup(ctx, mux_clk, child->id);
|
||||
+ rockchip_clk_set_lookup(ctx, mux_clk, child->id);
|
||||
|
||||
/* notifier on the fraction divider to catch rate changes */
|
||||
if (frac->mux_frac_idx >= 0) {
|
||||
@@ -452,7 +446,7 @@ void rockchip_clk_register_plls(struct r
|
||||
continue;
|
||||
}
|
||||
|
||||
- rockchip_clk_add_lookup(ctx, clk, list->id);
|
||||
+ rockchip_clk_set_lookup(ctx, clk, list->id);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rockchip_clk_register_plls);
|
||||
@@ -614,7 +608,7 @@ void rockchip_clk_register_branches(stru
|
||||
continue;
|
||||
}
|
||||
|
||||
- rockchip_clk_add_lookup(ctx, clk, list->id);
|
||||
+ rockchip_clk_set_lookup(ctx, clk, list->id);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rockchip_clk_register_branches);
|
||||
@@ -638,7 +632,7 @@ void rockchip_clk_register_armclk(struct
|
||||
return;
|
||||
}
|
||||
|
||||
- rockchip_clk_add_lookup(ctx, clk, lookup_id);
|
||||
+ rockchip_clk_set_lookup(ctx, clk, lookup_id);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rockchip_clk_register_armclk);
|
||||
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -1022,6 +1022,18 @@ struct rockchip_clk_branch {
|
||||
#define SGRF_GATE(_id, cname, pname) \
|
||||
FACTOR(_id, cname, pname, 0, 1, 1)
|
||||
|
||||
+static inline struct clk *rockchip_clk_get_lookup(struct rockchip_clk_provider *ctx,
|
||||
+ unsigned int id)
|
||||
+{
|
||||
+ return ctx->clk_data.clks[id];
|
||||
+}
|
||||
+
|
||||
+static inline void rockchip_clk_set_lookup(struct rockchip_clk_provider *ctx,
|
||||
+ struct clk *clk, unsigned int id)
|
||||
+{
|
||||
+ ctx->clk_data.clks[id] = clk;
|
||||
+}
|
||||
+
|
||||
struct rockchip_clk_provider *rockchip_clk_init(struct device_node *np,
|
||||
void __iomem *base, unsigned long nr_clks);
|
||||
struct rockchip_clk_provider *rockchip_clk_init_early(struct device_node *np,
|
||||
+314
@@ -0,0 +1,314 @@
|
||||
From c62fa612cfa66ab58ab215e5afc95c43c613b513 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Wed, 11 Dec 2024 17:58:53 +0100
|
||||
Subject: [PATCH] clk: rockchip: implement linked gate clock support
|
||||
|
||||
Recent Rockchip SoCs have a new hardware block called Native Interface
|
||||
Unit (NIU), which gates clocks to devices behind them. These clock
|
||||
gates will only have a running output clock when all of the following
|
||||
conditions are met:
|
||||
|
||||
1. the parent clock is enabled
|
||||
2. the enable bit is set correctly
|
||||
3. the linked clock is enabled
|
||||
|
||||
To handle them this code registers them as a normal gate type clock,
|
||||
which takes care of condition 1 + 2. The linked clock is handled by
|
||||
using runtime PM clocks. Handling it via runtime PM requires setting
|
||||
up a struct device for each of these clocks with a driver attached
|
||||
to use the correct runtime PM operations. Thus the complete handling
|
||||
of these clocks has been moved into its own driver.
|
||||
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20241211165957.94922-5-sebastian.reichel@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/Makefile | 1 +
|
||||
drivers/clk/rockchip/clk-rk3588.c | 23 +--------
|
||||
drivers/clk/rockchip/clk.c | 52 +++++++++++++++++++
|
||||
drivers/clk/rockchip/clk.h | 25 +++++++++
|
||||
drivers/clk/rockchip/gate-link.c | 85 +++++++++++++++++++++++++++++++
|
||||
5 files changed, 165 insertions(+), 21 deletions(-)
|
||||
create mode 100644 drivers/clk/rockchip/gate-link.c
|
||||
|
||||
--- a/drivers/clk/rockchip/Makefile
|
||||
+++ b/drivers/clk/rockchip/Makefile
|
||||
@@ -13,6 +13,7 @@ clk-rockchip-y += clk-inverter.o
|
||||
clk-rockchip-y += clk-mmc-phase.o
|
||||
clk-rockchip-y += clk-muxgrf.o
|
||||
clk-rockchip-y += clk-ddr.o
|
||||
+clk-rockchip-y += gate-link.o
|
||||
clk-rockchip-$(CONFIG_RESET_CONTROLLER) += softrst.o
|
||||
|
||||
obj-$(CONFIG_CLK_PX30) += clk-px30.o
|
||||
--- a/drivers/clk/rockchip/clk-rk3588.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3588.c
|
||||
@@ -12,25 +12,6 @@
|
||||
#include <dt-bindings/clock/rockchip,rk3588-cru.h>
|
||||
#include "clk.h"
|
||||
|
||||
-/*
|
||||
- * Recent Rockchip SoCs have a new hardware block called Native Interface
|
||||
- * Unit (NIU), which gates clocks to devices behind them. These effectively
|
||||
- * need two parent clocks.
|
||||
- *
|
||||
- * Downstream enables the linked clock via runtime PM whenever the gate is
|
||||
- * enabled. This implementation uses separate clock nodes for each of the
|
||||
- * linked gate clocks, which leaks parts of the clock tree into DT.
|
||||
- *
|
||||
- * The GATE_LINK macro instead takes the second parent via 'linkname', but
|
||||
- * ignores the information. Once the clock framework is ready to handle it, the
|
||||
- * information should be passed on here. But since these clocks are required to
|
||||
- * access multiple relevant IP blocks, such as PCIe or USB, we mark all linked
|
||||
- * clocks critical until a better solution is available. This will waste some
|
||||
- * power, but avoids leaking implementation details into DT or hanging the
|
||||
- * system.
|
||||
- */
|
||||
-#define GATE_LINK(_id, cname, pname, linkedclk, f, o, b, gf) \
|
||||
- GATE(_id, cname, pname, f, o, b, gf)
|
||||
#define RK3588_LINKED_CLK CLK_IS_CRITICAL
|
||||
|
||||
|
||||
@@ -2513,8 +2494,8 @@ static int clk_rk3588_probe(struct platf
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *np = dev->of_node;
|
||||
|
||||
- rockchip_clk_register_branches(ctx, rk3588_clk_branches,
|
||||
- ARRAY_SIZE(rk3588_clk_branches));
|
||||
+ rockchip_clk_register_late_branches(dev, ctx, rk3588_clk_branches,
|
||||
+ ARRAY_SIZE(rk3588_clk_branches));
|
||||
|
||||
rockchip_clk_finalize(ctx);
|
||||
|
||||
--- a/drivers/clk/rockchip/clk.c
|
||||
+++ b/drivers/clk/rockchip/clk.c
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
+#include <linux/platform_device.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/reboot.h>
|
||||
|
||||
@@ -468,6 +469,29 @@ unsigned long rockchip_clk_find_max_clk_
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rockchip_clk_find_max_clk_id);
|
||||
|
||||
+static struct platform_device *rockchip_clk_register_gate_link(
|
||||
+ struct device *parent_dev,
|
||||
+ struct rockchip_clk_provider *ctx,
|
||||
+ struct rockchip_clk_branch *clkbr)
|
||||
+{
|
||||
+ struct rockchip_gate_link_platdata gate_link_pdata = {
|
||||
+ .ctx = ctx,
|
||||
+ .clkbr = clkbr,
|
||||
+ };
|
||||
+
|
||||
+ struct platform_device_info pdevinfo = {
|
||||
+ .parent = parent_dev,
|
||||
+ .name = "rockchip-gate-link-clk",
|
||||
+ .id = clkbr->id,
|
||||
+ .fwnode = dev_fwnode(parent_dev),
|
||||
+ .of_node_reused = true,
|
||||
+ .data = &gate_link_pdata,
|
||||
+ .size_data = sizeof(gate_link_pdata),
|
||||
+ };
|
||||
+
|
||||
+ return platform_device_register_full(&pdevinfo);
|
||||
+}
|
||||
+
|
||||
void rockchip_clk_register_branches(struct rockchip_clk_provider *ctx,
|
||||
struct rockchip_clk_branch *list,
|
||||
unsigned int nr_clk)
|
||||
@@ -593,6 +617,9 @@ void rockchip_clk_register_branches(stru
|
||||
list->div_width, list->div_flags,
|
||||
ctx->reg_base, &ctx->lock);
|
||||
break;
|
||||
+ case branch_linked_gate:
|
||||
+ /* must be registered late, fall-through for error message */
|
||||
+ break;
|
||||
}
|
||||
|
||||
/* none of the cases above matched */
|
||||
@@ -613,6 +640,31 @@ void rockchip_clk_register_branches(stru
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rockchip_clk_register_branches);
|
||||
|
||||
+void rockchip_clk_register_late_branches(struct device *dev,
|
||||
+ struct rockchip_clk_provider *ctx,
|
||||
+ struct rockchip_clk_branch *list,
|
||||
+ unsigned int nr_clk)
|
||||
+{
|
||||
+ unsigned int idx;
|
||||
+
|
||||
+ for (idx = 0; idx < nr_clk; idx++, list++) {
|
||||
+ struct platform_device *pdev = NULL;
|
||||
+
|
||||
+ switch (list->branch_type) {
|
||||
+ case branch_linked_gate:
|
||||
+ pdev = rockchip_clk_register_gate_link(dev, ctx, list);
|
||||
+ break;
|
||||
+ default:
|
||||
+ dev_err(dev, "unknown clock type %d\n", list->branch_type);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (!pdev)
|
||||
+ dev_err(dev, "failed to register device for clock %s\n", list->name);
|
||||
+ }
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(rockchip_clk_register_late_branches);
|
||||
+
|
||||
void rockchip_clk_register_armclk(struct rockchip_clk_provider *ctx,
|
||||
unsigned int lookup_id,
|
||||
const char *name, const char *const *parent_names,
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -570,6 +570,7 @@ enum rockchip_clk_branch_type {
|
||||
branch_divider,
|
||||
branch_fraction_divider,
|
||||
branch_gate,
|
||||
+ branch_linked_gate,
|
||||
branch_mmc,
|
||||
branch_inverter,
|
||||
branch_factor,
|
||||
@@ -597,6 +598,7 @@ struct rockchip_clk_branch {
|
||||
int gate_offset;
|
||||
u8 gate_shift;
|
||||
u8 gate_flags;
|
||||
+ unsigned int linked_clk_id;
|
||||
struct rockchip_clk_branch *child;
|
||||
};
|
||||
|
||||
@@ -895,6 +897,20 @@ struct rockchip_clk_branch {
|
||||
.gate_flags = gf, \
|
||||
}
|
||||
|
||||
+#define GATE_LINK(_id, cname, pname, linkedclk, f, o, b, gf) \
|
||||
+ { \
|
||||
+ .id = _id, \
|
||||
+ .branch_type = branch_linked_gate, \
|
||||
+ .name = cname, \
|
||||
+ .parent_names = (const char *[]){ pname }, \
|
||||
+ .linked_clk_id = linkedclk, \
|
||||
+ .num_parents = 1, \
|
||||
+ .flags = f, \
|
||||
+ .gate_offset = o, \
|
||||
+ .gate_shift = b, \
|
||||
+ .gate_flags = gf, \
|
||||
+ }
|
||||
+
|
||||
#define MMC(_id, cname, pname, offset, shift) \
|
||||
{ \
|
||||
.id = _id, \
|
||||
@@ -1034,6 +1050,11 @@ static inline void rockchip_clk_set_look
|
||||
ctx->clk_data.clks[id] = clk;
|
||||
}
|
||||
|
||||
+struct rockchip_gate_link_platdata {
|
||||
+ struct rockchip_clk_provider *ctx;
|
||||
+ struct rockchip_clk_branch *clkbr;
|
||||
+};
|
||||
+
|
||||
struct rockchip_clk_provider *rockchip_clk_init(struct device_node *np,
|
||||
void __iomem *base, unsigned long nr_clks);
|
||||
struct rockchip_clk_provider *rockchip_clk_init_early(struct device_node *np,
|
||||
@@ -1046,6 +1067,10 @@ unsigned long rockchip_clk_find_max_clk_
|
||||
void rockchip_clk_register_branches(struct rockchip_clk_provider *ctx,
|
||||
struct rockchip_clk_branch *list,
|
||||
unsigned int nr_clk);
|
||||
+void rockchip_clk_register_late_branches(struct device *dev,
|
||||
+ struct rockchip_clk_provider *ctx,
|
||||
+ struct rockchip_clk_branch *list,
|
||||
+ unsigned int nr_clk);
|
||||
void rockchip_clk_register_plls(struct rockchip_clk_provider *ctx,
|
||||
struct rockchip_pll_clock *pll_list,
|
||||
unsigned int nr_pll, int grf_lock_offset);
|
||||
--- /dev/null
|
||||
+++ b/drivers/clk/rockchip/gate-link.c
|
||||
@@ -0,0 +1,85 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+/*
|
||||
+ * Copyright (c) 2024 Collabora Ltd.
|
||||
+ * Author: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
+ */
|
||||
+
|
||||
+#include <linux/clk.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/pm_clock.h>
|
||||
+#include <linux/pm_runtime.h>
|
||||
+#include <linux/property.h>
|
||||
+#include "clk.h"
|
||||
+
|
||||
+static int rk_clk_gate_link_register(struct device *dev,
|
||||
+ struct rockchip_clk_provider *ctx,
|
||||
+ struct rockchip_clk_branch *clkbr)
|
||||
+{
|
||||
+ unsigned long flags = clkbr->flags | CLK_SET_RATE_PARENT;
|
||||
+ struct clk *clk;
|
||||
+
|
||||
+ clk = clk_register_gate(dev, clkbr->name, clkbr->parent_names[0],
|
||||
+ flags, ctx->reg_base + clkbr->gate_offset,
|
||||
+ clkbr->gate_shift, clkbr->gate_flags,
|
||||
+ &ctx->lock);
|
||||
+
|
||||
+ if (IS_ERR(clk))
|
||||
+ return PTR_ERR(clk);
|
||||
+
|
||||
+ rockchip_clk_set_lookup(ctx, clk, clkbr->id);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int rk_clk_gate_link_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct rockchip_gate_link_platdata *pdata;
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ struct clk *linked_clk;
|
||||
+ int ret;
|
||||
+
|
||||
+ pdata = dev_get_platdata(dev);
|
||||
+ if (!pdata)
|
||||
+ return dev_err_probe(dev, -ENODEV, "missing platform data");
|
||||
+
|
||||
+ ret = devm_pm_runtime_enable(dev);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = devm_pm_clk_create(dev);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ linked_clk = rockchip_clk_get_lookup(pdata->ctx, pdata->clkbr->linked_clk_id);
|
||||
+ ret = pm_clk_add_clk(dev, linked_clk);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = rk_clk_gate_link_register(dev, pdata->ctx, pdata->clkbr);
|
||||
+ if (ret)
|
||||
+ goto err;
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+err:
|
||||
+ pm_clk_remove_clk(dev, linked_clk);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static const struct dev_pm_ops rk_clk_gate_link_pm_ops = {
|
||||
+ SET_RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
|
||||
+};
|
||||
+
|
||||
+static struct platform_driver rk_clk_gate_link_driver = {
|
||||
+ .probe = rk_clk_gate_link_probe,
|
||||
+ .driver = {
|
||||
+ .name = "rockchip-gate-link-clk",
|
||||
+ .pm = &rk_clk_gate_link_pm_ops,
|
||||
+ .suppress_bind_attrs = true,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static int __init rk_clk_gate_link_drv_register(void)
|
||||
+{
|
||||
+ return platform_driver_register(&rk_clk_gate_link_driver);
|
||||
+}
|
||||
+core_initcall(rk_clk_gate_link_drv_register);
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
From e9cdd7d6cf2a5031a968dc21f4f566101b602150 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Date: Wed, 11 Dec 2024 17:58:54 +0100
|
||||
Subject: [PATCH] clk: rockchip: rk3588: drop RK3588_LINKED_CLK
|
||||
|
||||
With the proper GATE_LINK support, we no longer need to keep the
|
||||
linked clocks always on. Thus it's time to drop the CLK_IS_CRITICAL
|
||||
flag for them.
|
||||
|
||||
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20241211165957.94922-6-sebastian.reichel@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3588.c | 27 ++++++++++++---------------
|
||||
1 file changed, 12 insertions(+), 15 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3588.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3588.c
|
||||
@@ -12,9 +12,6 @@
|
||||
#include <dt-bindings/clock/rockchip,rk3588-cru.h>
|
||||
#include "clk.h"
|
||||
|
||||
-#define RK3588_LINKED_CLK CLK_IS_CRITICAL
|
||||
-
|
||||
-
|
||||
#define RK3588_GRF_SOC_STATUS0 0x600
|
||||
#define RK3588_PHYREF_ALT_GATE 0xc38
|
||||
|
||||
@@ -1439,7 +1436,7 @@ static struct rockchip_clk_branch rk3588
|
||||
COMPOSITE_NODIV(HCLK_NVM_ROOT, "hclk_nvm_root", mux_200m_100m_50m_24m_p, 0,
|
||||
RK3588_CLKSEL_CON(77), 0, 2, MFLAGS,
|
||||
RK3588_CLKGATE_CON(31), 0, GFLAGS),
|
||||
- COMPOSITE(ACLK_NVM_ROOT, "aclk_nvm_root", gpll_cpll_p, RK3588_LINKED_CLK,
|
||||
+ COMPOSITE(ACLK_NVM_ROOT, "aclk_nvm_root", gpll_cpll_p, 0,
|
||||
RK3588_CLKSEL_CON(77), 7, 1, MFLAGS, 2, 5, DFLAGS,
|
||||
RK3588_CLKGATE_CON(31), 1, GFLAGS),
|
||||
GATE(ACLK_EMMC, "aclk_emmc", "aclk_nvm_root", 0,
|
||||
@@ -1668,13 +1665,13 @@ static struct rockchip_clk_branch rk3588
|
||||
RK3588_CLKGATE_CON(42), 9, GFLAGS),
|
||||
|
||||
/* vdpu */
|
||||
- COMPOSITE(ACLK_VDPU_ROOT, "aclk_vdpu_root", gpll_cpll_aupll_p, RK3588_LINKED_CLK,
|
||||
+ COMPOSITE(ACLK_VDPU_ROOT, "aclk_vdpu_root", gpll_cpll_aupll_p, 0,
|
||||
RK3588_CLKSEL_CON(98), 5, 2, MFLAGS, 0, 5, DFLAGS,
|
||||
RK3588_CLKGATE_CON(44), 0, GFLAGS),
|
||||
COMPOSITE_NODIV(ACLK_VDPU_LOW_ROOT, "aclk_vdpu_low_root", mux_400m_200m_100m_24m_p, 0,
|
||||
RK3588_CLKSEL_CON(98), 7, 2, MFLAGS,
|
||||
RK3588_CLKGATE_CON(44), 1, GFLAGS),
|
||||
- COMPOSITE_NODIV(HCLK_VDPU_ROOT, "hclk_vdpu_root", mux_200m_100m_50m_24m_p, RK3588_LINKED_CLK,
|
||||
+ COMPOSITE_NODIV(HCLK_VDPU_ROOT, "hclk_vdpu_root", mux_200m_100m_50m_24m_p, 0,
|
||||
RK3588_CLKSEL_CON(98), 9, 2, MFLAGS,
|
||||
RK3588_CLKGATE_CON(44), 2, GFLAGS),
|
||||
COMPOSITE(ACLK_JPEG_DECODER_ROOT, "aclk_jpeg_decoder_root", gpll_cpll_aupll_spll_p, 0,
|
||||
@@ -1725,9 +1722,9 @@ static struct rockchip_clk_branch rk3588
|
||||
COMPOSITE(ACLK_RKVENC0_ROOT, "aclk_rkvenc0_root", gpll_cpll_npll_p, 0,
|
||||
RK3588_CLKSEL_CON(102), 7, 2, MFLAGS, 2, 5, DFLAGS,
|
||||
RK3588_CLKGATE_CON(47), 1, GFLAGS),
|
||||
- GATE(HCLK_RKVENC0, "hclk_rkvenc0", "hclk_rkvenc0_root", RK3588_LINKED_CLK,
|
||||
+ GATE(HCLK_RKVENC0, "hclk_rkvenc0", "hclk_rkvenc0_root", 0,
|
||||
RK3588_CLKGATE_CON(47), 4, GFLAGS),
|
||||
- GATE(ACLK_RKVENC0, "aclk_rkvenc0", "aclk_rkvenc0_root", RK3588_LINKED_CLK,
|
||||
+ GATE(ACLK_RKVENC0, "aclk_rkvenc0", "aclk_rkvenc0_root", 0,
|
||||
RK3588_CLKGATE_CON(47), 5, GFLAGS),
|
||||
COMPOSITE(CLK_RKVENC0_CORE, "clk_rkvenc0_core", gpll_cpll_aupll_npll_p, 0,
|
||||
RK3588_CLKSEL_CON(102), 14, 2, MFLAGS, 9, 5, DFLAGS,
|
||||
@@ -1737,10 +1734,10 @@ static struct rockchip_clk_branch rk3588
|
||||
RK3588_CLKGATE_CON(48), 6, GFLAGS),
|
||||
|
||||
/* vi */
|
||||
- COMPOSITE(ACLK_VI_ROOT, "aclk_vi_root", gpll_cpll_npll_aupll_spll_p, RK3588_LINKED_CLK,
|
||||
+ COMPOSITE(ACLK_VI_ROOT, "aclk_vi_root", gpll_cpll_npll_aupll_spll_p, 0,
|
||||
RK3588_CLKSEL_CON(106), 5, 3, MFLAGS, 0, 5, DFLAGS,
|
||||
RK3588_CLKGATE_CON(49), 0, GFLAGS),
|
||||
- COMPOSITE_NODIV(HCLK_VI_ROOT, "hclk_vi_root", mux_200m_100m_50m_24m_p, RK3588_LINKED_CLK,
|
||||
+ COMPOSITE_NODIV(HCLK_VI_ROOT, "hclk_vi_root", mux_200m_100m_50m_24m_p, 0,
|
||||
RK3588_CLKSEL_CON(106), 8, 2, MFLAGS,
|
||||
RK3588_CLKGATE_CON(49), 1, GFLAGS),
|
||||
COMPOSITE_NODIV(PCLK_VI_ROOT, "pclk_vi_root", mux_100m_50m_24m_p, 0,
|
||||
@@ -1910,10 +1907,10 @@ static struct rockchip_clk_branch rk3588
|
||||
COMPOSITE(ACLK_VOP_ROOT, "aclk_vop_root", gpll_cpll_dmyaupll_npll_spll_p, 0,
|
||||
RK3588_CLKSEL_CON(110), 5, 3, MFLAGS, 0, 5, DFLAGS,
|
||||
RK3588_CLKGATE_CON(52), 0, GFLAGS),
|
||||
- COMPOSITE_NODIV(ACLK_VOP_LOW_ROOT, "aclk_vop_low_root", mux_400m_200m_100m_24m_p, RK3588_LINKED_CLK,
|
||||
+ COMPOSITE_NODIV(ACLK_VOP_LOW_ROOT, "aclk_vop_low_root", mux_400m_200m_100m_24m_p, 0,
|
||||
RK3588_CLKSEL_CON(110), 8, 2, MFLAGS,
|
||||
RK3588_CLKGATE_CON(52), 1, GFLAGS),
|
||||
- COMPOSITE_NODIV(HCLK_VOP_ROOT, "hclk_vop_root", mux_200m_100m_50m_24m_p, RK3588_LINKED_CLK,
|
||||
+ COMPOSITE_NODIV(HCLK_VOP_ROOT, "hclk_vop_root", mux_200m_100m_50m_24m_p, 0,
|
||||
RK3588_CLKSEL_CON(110), 10, 2, MFLAGS,
|
||||
RK3588_CLKGATE_CON(52), 2, GFLAGS),
|
||||
COMPOSITE_NODIV(PCLK_VOP_ROOT, "pclk_vop_root", mux_100m_50m_24m_p, 0,
|
||||
@@ -2416,7 +2413,7 @@ static struct rockchip_clk_branch rk3588
|
||||
static struct rockchip_clk_branch rk3588_clk_branches[] = {
|
||||
GATE_LINK(ACLK_ISP1_PRE, "aclk_isp1_pre", "aclk_isp1_root", ACLK_VI_ROOT, 0, RK3588_CLKGATE_CON(26), 6, GFLAGS),
|
||||
GATE_LINK(HCLK_ISP1_PRE, "hclk_isp1_pre", "hclk_isp1_root", HCLK_VI_ROOT, 0, RK3588_CLKGATE_CON(26), 8, GFLAGS),
|
||||
- GATE_LINK(HCLK_NVM, "hclk_nvm", "hclk_nvm_root", ACLK_NVM_ROOT, RK3588_LINKED_CLK, RK3588_CLKGATE_CON(31), 2, GFLAGS),
|
||||
+ GATE_LINK(HCLK_NVM, "hclk_nvm", "hclk_nvm_root", ACLK_NVM_ROOT, 0, RK3588_CLKGATE_CON(31), 2, GFLAGS),
|
||||
GATE_LINK(ACLK_USB, "aclk_usb", "aclk_usb_root", ACLK_VO1USB_TOP_ROOT, 0, RK3588_CLKGATE_CON(42), 2, GFLAGS),
|
||||
GATE_LINK(HCLK_USB, "hclk_usb", "hclk_usb_root", HCLK_VO1USB_TOP_ROOT, 0, RK3588_CLKGATE_CON(42), 3, GFLAGS),
|
||||
GATE_LINK(ACLK_JPEG_DECODER_PRE, "aclk_jpeg_decoder_pre", "aclk_jpeg_decoder_root", ACLK_VDPU_ROOT, 0, RK3588_CLKGATE_CON(44), 7, GFLAGS),
|
||||
@@ -2428,9 +2425,9 @@ static struct rockchip_clk_branch rk3588
|
||||
GATE_LINK(HCLK_RKVDEC1_PRE, "hclk_rkvdec1_pre", "hclk_rkvdec1_root", HCLK_VDPU_ROOT, 0, RK3588_CLKGATE_CON(41), 4, GFLAGS),
|
||||
GATE_LINK(ACLK_RKVDEC1_PRE, "aclk_rkvdec1_pre", "aclk_rkvdec1_root", ACLK_VDPU_ROOT, 0, RK3588_CLKGATE_CON(41), 5, GFLAGS),
|
||||
GATE_LINK(ACLK_HDCP0_PRE, "aclk_hdcp0_pre", "aclk_vo0_root", ACLK_VOP_LOW_ROOT, 0, RK3588_CLKGATE_CON(55), 9, GFLAGS),
|
||||
- GATE_LINK(HCLK_VO0, "hclk_vo0", "hclk_vo0_root", HCLK_VOP_ROOT, RK3588_LINKED_CLK, RK3588_CLKGATE_CON(55), 5, GFLAGS),
|
||||
+ GATE_LINK(HCLK_VO0, "hclk_vo0", "hclk_vo0_root", HCLK_VOP_ROOT, 0, RK3588_CLKGATE_CON(55), 5, GFLAGS),
|
||||
GATE_LINK(ACLK_HDCP1_PRE, "aclk_hdcp1_pre", "aclk_hdcp1_root", ACLK_VO1USB_TOP_ROOT, 0, RK3588_CLKGATE_CON(59), 6, GFLAGS),
|
||||
- GATE_LINK(HCLK_VO1, "hclk_vo1", "hclk_vo1_root", HCLK_VO1USB_TOP_ROOT, RK3588_LINKED_CLK, RK3588_CLKGATE_CON(59), 9, GFLAGS),
|
||||
+ GATE_LINK(HCLK_VO1, "hclk_vo1", "hclk_vo1_root", HCLK_VO1USB_TOP_ROOT, 0, RK3588_CLKGATE_CON(59), 9, GFLAGS),
|
||||
GATE_LINK(ACLK_AV1_PRE, "aclk_av1_pre", "aclk_av1_root", ACLK_VDPU_ROOT, 0, RK3588_CLKGATE_CON(68), 1, GFLAGS),
|
||||
GATE_LINK(PCLK_AV1_PRE, "pclk_av1_pre", "pclk_av1_root", HCLK_VDPU_ROOT, 0, RK3588_CLKGATE_CON(68), 4, GFLAGS),
|
||||
GATE_LINK(HCLK_SDIO_PRE, "hclk_sdio_pre", "hclk_sdio_root", HCLK_NVM, 0, RK3588_CLKGATE_CON(75), 1, GFLAGS),
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
From cd8b5366636bdff0449b789fb2d33abb20804255 Mon Sep 17 00:00:00 2001
|
||||
From: Heiko Stuebner <heiko.stuebner@cherry.de>
|
||||
Date: Sat, 14 Dec 2024 23:48:19 +0100
|
||||
Subject: [PATCH] clk: rockchip: rk3588: make refclko25m_ethX critical
|
||||
|
||||
Ethernet phys normally need a 25MHz refclk input. On a lot of boards
|
||||
this is done with a dedicated 25MHz crystal. But the rk3588 CRU also
|
||||
provides a means for that via the refclko25m_ethX clock outputs that
|
||||
can be used for that function.
|
||||
|
||||
The mdio bus normally probes devices on the bus at runtime, by reading
|
||||
specific phy registers. This requires the phy to be running and thus
|
||||
also being supplied by its reference clock.
|
||||
|
||||
While there exist the possibility and dt-binding to declare these
|
||||
input clocks for each phy in the phy-dt-node, this is only relevant
|
||||
_after_ the phy has been detected and during the drivers probe-run.
|
||||
|
||||
This results in a chicken-and-egg-problem. The refclks in the CRU are
|
||||
running on boot of course, but phy-probing can very well happen after
|
||||
clk_disable_unused has run.
|
||||
|
||||
In the past I tried to make clock-handling part of the mdio bus code [0]
|
||||
but that wasn't very well received, due to it being specific to OF and
|
||||
clocks with the consensus being that resources needed for detection
|
||||
need to be enabled before.
|
||||
|
||||
So to make probing ethernet phys using the internal refclks possible,
|
||||
make those 2 clocks critical.
|
||||
|
||||
[0] https://lore.kernel.org/netdev/13590315.F0gNSz5aLb@diego/T/
|
||||
|
||||
Signed-off-by: Heiko Stuebner <heiko.stuebner@cherry.de>
|
||||
Link: https://lore.kernel.org/r/20241214224820.200665-1-heiko@sntech.de
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3588.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3588.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3588.c
|
||||
@@ -772,10 +772,10 @@ static struct rockchip_clk_branch rk3588
|
||||
COMPOSITE(MCLK_GMAC0_OUT, "mclk_gmac0_out", gpll_cpll_p, 0,
|
||||
RK3588_CLKSEL_CON(15), 7, 1, MFLAGS, 0, 7, DFLAGS,
|
||||
RK3588_CLKGATE_CON(5), 3, GFLAGS),
|
||||
- COMPOSITE(REFCLKO25M_ETH0_OUT, "refclko25m_eth0_out", gpll_cpll_p, 0,
|
||||
+ COMPOSITE(REFCLKO25M_ETH0_OUT, "refclko25m_eth0_out", gpll_cpll_p, CLK_IS_CRITICAL,
|
||||
RK3588_CLKSEL_CON(15), 15, 1, MFLAGS, 8, 7, DFLAGS,
|
||||
RK3588_CLKGATE_CON(5), 4, GFLAGS),
|
||||
- COMPOSITE(REFCLKO25M_ETH1_OUT, "refclko25m_eth1_out", gpll_cpll_p, 0,
|
||||
+ COMPOSITE(REFCLKO25M_ETH1_OUT, "refclko25m_eth1_out", gpll_cpll_p, CLK_IS_CRITICAL,
|
||||
RK3588_CLKSEL_CON(16), 7, 1, MFLAGS, 0, 7, DFLAGS,
|
||||
RK3588_CLKGATE_CON(5), 5, GFLAGS),
|
||||
COMPOSITE(CLK_CIFOUT_OUT, "clk_cifout_out", gpll_cpll_24m_spll_p, 0,
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
From 83dbeca33f7422f4a30c8a91a79d6c0dba4fb6af Mon Sep 17 00:00:00 2001
|
||||
From: Michael Riesch <michael.riesch@wolfvision.net>
|
||||
Date: Mon, 10 Feb 2025 09:29:02 +0100
|
||||
Subject: [PATCH] clk: rockchip: rk3568: mark hclk_vi as critical
|
||||
|
||||
The clock 'pclk_vi_niu' has a dependency on 'hclk_vi_niu' according
|
||||
to the Technical Reference Manual section '2.8.6 NIU Clock gating
|
||||
reliance'. However, this kind of dependency cannot be addressed
|
||||
properly at the moment (until the support for linked clocks is
|
||||
implemented for the RK3568).
|
||||
As an intermediate solution, mark the hclk_vi as critical on the
|
||||
Rockchip RK3568.
|
||||
|
||||
Suggested-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
|
||||
Signed-off-by: Michael Riesch <michael.riesch@wolfvision.net>
|
||||
Link: https://lore.kernel.org/r/20250210-rk3568-hclk-vi-v1-1-9ade2626f638@wolfvision.net
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3568.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3568.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3568.c
|
||||
@@ -1602,6 +1602,7 @@ static const char *const rk3568_cru_crit
|
||||
"pclk_php",
|
||||
"hclk_usb",
|
||||
"pclk_usb",
|
||||
+ "hclk_vi",
|
||||
"hclk_vo",
|
||||
};
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
From 831a8ac72264426ccd0ee5d2b0d74491ea7d2bfb Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Shiyan <eagle.alexander923@gmail.com>
|
||||
Date: Tue, 8 Apr 2025 09:46:12 +0300
|
||||
Subject: [PATCH] clk: rockchip: rk3588: Add PLL rate for 1500 MHz
|
||||
|
||||
At least one RK3588 clock (CPLL) uses 1.5 GHz, so let's add
|
||||
that frequency to the PLL table.
|
||||
|
||||
Signed-off-by: Alexander Shiyan <eagle.alexander923@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20250408064612.41359-1-eagle.alexander923@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3588.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3588.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3588.c
|
||||
@@ -64,6 +64,7 @@ static struct rockchip_pll_rate_table rk
|
||||
RK3588_PLL_RATE(1560000000, 2, 260, 1, 0),
|
||||
RK3588_PLL_RATE(1536000000, 2, 256, 1, 0),
|
||||
RK3588_PLL_RATE(1512000000, 2, 252, 1, 0),
|
||||
+ RK3588_PLL_RATE(1500000000, 2, 250, 1, 0),
|
||||
RK3588_PLL_RATE(1488000000, 2, 248, 1, 0),
|
||||
RK3588_PLL_RATE(1464000000, 2, 244, 1, 0),
|
||||
RK3588_PLL_RATE(1440000000, 2, 240, 1, 0),
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
From 646bfc52bbe184c0579060c3919e5d70885b0dcc Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Wed, 26 Mar 2025 11:35:56 +0000
|
||||
Subject: [PATCH] clk: rockchip: Drop empty init callback for rk3588 PLL type
|
||||
|
||||
Unlike PLLs in previous geneation of SoCs, PLLs in RK3588 type don't
|
||||
require any platform-specific initialization. Drop callback
|
||||
rockchip_rk3588_pll_init() that does nothing in fact to clean the
|
||||
driver up.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Link: https://lore.kernel.org/r/20250326113556.21039-1-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-pll.c | 11 -----------
|
||||
1 file changed, 11 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-pll.c
|
||||
+++ b/drivers/clk/rockchip/clk-pll.c
|
||||
@@ -1025,16 +1025,6 @@ static int rockchip_rk3588_pll_is_enable
|
||||
return !(pllcon & RK3588_PLLCON1_PWRDOWN);
|
||||
}
|
||||
|
||||
-static int rockchip_rk3588_pll_init(struct clk_hw *hw)
|
||||
-{
|
||||
- struct rockchip_clk_pll *pll = to_rockchip_clk_pll(hw);
|
||||
-
|
||||
- if (!(pll->flags & ROCKCHIP_PLL_SYNC_RATE))
|
||||
- return 0;
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static const struct clk_ops rockchip_rk3588_pll_clk_norate_ops = {
|
||||
.recalc_rate = rockchip_rk3588_pll_recalc_rate,
|
||||
.enable = rockchip_rk3588_pll_enable,
|
||||
@@ -1049,7 +1039,6 @@ static const struct clk_ops rockchip_rk3
|
||||
.enable = rockchip_rk3588_pll_enable,
|
||||
.disable = rockchip_rk3588_pll_disable,
|
||||
.is_enabled = rockchip_rk3588_pll_is_enabled,
|
||||
- .init = rockchip_rk3588_pll_init,
|
||||
};
|
||||
|
||||
/*
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
From 184055a9ae2b7b19f6fd6e9c0b7e1edce6930b2f Mon Sep 17 00:00:00 2001
|
||||
From: Shawn Lin <shawn.lin@rock-chips.com>
|
||||
Date: Wed, 5 Feb 2025 14:15:51 +0800
|
||||
Subject: [PATCH] soc: rockchip: add header for suspend mode SIP interface
|
||||
|
||||
Add ROCKCHIP_SIP_SUSPEND_MODE to pass down parameters to Trusted Firmware
|
||||
in order to decide suspend mode. Currently only add ROCKCHIP_SLEEP_PD_CONFIG
|
||||
which teaches firmware to power down controllers or not.
|
||||
|
||||
Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
|
||||
Acked-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Link: https://lore.kernel.org/r/1738736156-119203-3-git-send-email-shawn.lin@rock-chips.com
|
||||
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
|
||||
---
|
||||
include/soc/rockchip/rockchip_sip.h | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
--- a/include/soc/rockchip/rockchip_sip.h
|
||||
+++ b/include/soc/rockchip/rockchip_sip.h
|
||||
@@ -6,6 +6,9 @@
|
||||
#ifndef __SOC_ROCKCHIP_SIP_H
|
||||
#define __SOC_ROCKCHIP_SIP_H
|
||||
|
||||
+#define ROCKCHIP_SIP_SUSPEND_MODE 0x82000003
|
||||
+#define ROCKCHIP_SLEEP_PD_CONFIG 0xff
|
||||
+
|
||||
#define ROCKCHIP_SIP_DRAM_FREQ 0x82000008
|
||||
#define ROCKCHIP_SIP_CONFIG_DRAM_INIT 0x00
|
||||
#define ROCKCHIP_SIP_CONFIG_DRAM_SET_RATE 0x01
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
From d934a93bbcccd551c142206b8129903d18126261 Mon Sep 17 00:00:00 2001
|
||||
From: Heiko Stuebner <heiko@sntech.de>
|
||||
Date: Mon, 10 Feb 2025 23:45:05 +0100
|
||||
Subject: [PATCH] clk: rockchip: rk3576: define clk_otp_phy_g
|
||||
|
||||
The phy clock of the OTP block is also present, but was not defined
|
||||
so far. Though its clk-id already existed, so just define its location.
|
||||
|
||||
Tested-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Link: https://lore.kernel.org/r/20250210224510.1194963-2-heiko@sntech.de
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3576.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3576.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3576.c
|
||||
@@ -541,6 +541,8 @@ static struct rockchip_clk_branch rk3576
|
||||
RK3576_CLKGATE_CON(5), 14, GFLAGS),
|
||||
GATE(CLK_OTPC_AUTO_RD_G, "clk_otpc_auto_rd_g", "xin24m", 0,
|
||||
RK3576_CLKGATE_CON(5), 15, GFLAGS),
|
||||
+ GATE(CLK_OTP_PHY_G, "clk_otp_phy_g", "xin24m", 0,
|
||||
+ RK3576_CLKGATE_CON(6), 0, GFLAGS),
|
||||
COMPOSITE(CLK_MIPI_CAMERAOUT_M0, "clk_mipi_cameraout_m0", mux_24m_spll_gpll_cpll_p, 0,
|
||||
RK3576_CLKSEL_CON(38), 8, 2, MFLAGS, 0, 8, DFLAGS,
|
||||
RK3576_CLKGATE_CON(6), 3, GFLAGS),
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
From 28699ca6d9018201674787e7b6bdce68d9cf7256 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Mon, 10 Mar 2025 10:59:56 +0100
|
||||
Subject: [PATCH] dt-bindings: clock: rk3576: add SCMI clocks
|
||||
|
||||
Mainline Linux uses different clock IDs from both downstream and
|
||||
mainline TF-A, which both got them from downstream Linux. If we want to
|
||||
control clocks through SCMI, we'll need to know about these IDs.
|
||||
|
||||
Add the relevant ones prefixed with SCMI_ to the header.
|
||||
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Acked-by: "Rob Herring (Arm)" <robh@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20250310-rk3576-scmi-clocks-v1-1-e165deb034e8@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
include/dt-bindings/clock/rockchip,rk3576-cru.h | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
--- a/include/dt-bindings/clock/rockchip,rk3576-cru.h
|
||||
+++ b/include/dt-bindings/clock/rockchip,rk3576-cru.h
|
||||
@@ -589,4 +589,9 @@
|
||||
#define PCLK_EDP_S 569
|
||||
#define ACLK_KLAD 570
|
||||
|
||||
+/* SCMI clocks, use these when changing clocks through SCMI */
|
||||
+#define SCMI_ARMCLK_L 10
|
||||
+#define SCMI_ARMCLK_B 11
|
||||
+#define SCMI_CLK_GPU 456
|
||||
+
|
||||
#endif
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
From 4210f21c004a18aad11c55bdaf552e649a4fd286 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Fri, 2 May 2025 13:03:07 +0200
|
||||
Subject: [PATCH] dt-bindings: clock: rk3576: add IOC gated clocks
|
||||
|
||||
Certain clocks on the RK3576 are additionally essentially "gated" behind
|
||||
some bit toggles in the IOC GRF range. Downstream ungates these by
|
||||
adding a separate clock driver that maps over the GRF range and leaks
|
||||
their implementation of this into the DT.
|
||||
|
||||
Instead, define some new clock IDs for these, so that consumers of these
|
||||
types of clocks can properly articulate which clock they're using, so
|
||||
that we can then add them to the clock driver for SoCs that need them.
|
||||
|
||||
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250502-rk3576-sai-v3-1-376cef19dd7c@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
include/dt-bindings/clock/rockchip,rk3576-cru.h | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
--- a/include/dt-bindings/clock/rockchip,rk3576-cru.h
|
||||
+++ b/include/dt-bindings/clock/rockchip,rk3576-cru.h
|
||||
@@ -594,4 +594,14 @@
|
||||
#define SCMI_ARMCLK_B 11
|
||||
#define SCMI_CLK_GPU 456
|
||||
|
||||
+/* IOC-controlled output clocks */
|
||||
+#define CLK_SAI0_MCLKOUT_TO_IO 571
|
||||
+#define CLK_SAI1_MCLKOUT_TO_IO 572
|
||||
+#define CLK_SAI2_MCLKOUT_TO_IO 573
|
||||
+#define CLK_SAI3_MCLKOUT_TO_IO 574
|
||||
+#define CLK_SAI4_MCLKOUT_TO_IO 575
|
||||
+#define CLK_SAI4_MCLKOUT_TO_IO 575
|
||||
+#define CLK_FSPI0_TO_IO 576
|
||||
+#define CLK_FSPI1_TO_IO 577
|
||||
+
|
||||
#endif
|
||||
+299
@@ -0,0 +1,299 @@
|
||||
From 70a114daf2077472e58b3cac23ba8998e35352f4 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Fri, 2 May 2025 13:03:08 +0200
|
||||
Subject: [PATCH] clk: rockchip: introduce auxiliary GRFs
|
||||
|
||||
The MUXGRF clock branch type depends on having access to some sort of
|
||||
GRF as a regmap to be registered. So far, we could easily get away with
|
||||
only ever having one GRF stowed away in the context.
|
||||
|
||||
However, newer Rockchip SoCs, such as the RK3576, have several GRFs
|
||||
which are relevant for clock purposes. It already depends on the pmu0
|
||||
GRF for MUXGRF reasons, but could get away with not refactoring this
|
||||
because it didn't need the sysgrf at all, so could overwrite the pointer
|
||||
in the clock provider to the pmu0 grf regmap handle.
|
||||
|
||||
In preparation for needing to finally access more than one GRF per SoC,
|
||||
let's untangle this. Introduce an auxiliary GRF hashmap, and a GRF type
|
||||
enum. The hashmap is keyed by the enum, and clock branches now have a
|
||||
struct member to store the value of that enum, which defaults to the
|
||||
system GRF.
|
||||
|
||||
The SoC-specific _clk_init function can then insert pointers to GRF
|
||||
regmaps into the hashmap based on the grf type.
|
||||
|
||||
During clock branch registration, we then pick the right GRF for each
|
||||
branch from the hashmap if something other than the sys GRF is
|
||||
requested.
|
||||
|
||||
The reason for doing it with this grf type indirection in the clock
|
||||
branches is so that we don't need to define the MUXGRF branches in a
|
||||
separate step, just to have a direct pointer to a regmap available
|
||||
already.
|
||||
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250502-rk3576-sai-v3-2-376cef19dd7c@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3288.c | 2 +-
|
||||
drivers/clk/rockchip/clk-rk3328.c | 6 +++---
|
||||
drivers/clk/rockchip/clk-rk3568.c | 2 +-
|
||||
drivers/clk/rockchip/clk-rk3576.c | 32 +++++++++++++++++++++----------
|
||||
drivers/clk/rockchip/clk-rv1126.c | 2 +-
|
||||
drivers/clk/rockchip/clk.c | 17 +++++++++++++++-
|
||||
drivers/clk/rockchip/clk.h | 29 +++++++++++++++++++++++++++-
|
||||
7 files changed, 72 insertions(+), 18 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3288.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
||||
@@ -418,7 +418,7 @@ static struct rockchip_clk_branch rk3288
|
||||
RK3288_CLKSEL_CON(32), 14, 2, MFLAGS, 8, 5, DFLAGS,
|
||||
RK3288_CLKGATE_CON(3), 11, GFLAGS),
|
||||
MUXGRF(0, "aclk_vcodec_pre", mux_aclk_vcodec_pre_p, CLK_SET_RATE_PARENT,
|
||||
- RK3288_GRF_SOC_CON(0), 7, 1, MFLAGS),
|
||||
+ RK3288_GRF_SOC_CON(0), 7, 1, MFLAGS, grf_type_sys),
|
||||
GATE(ACLK_VCODEC, "aclk_vcodec", "aclk_vcodec_pre", 0,
|
||||
RK3288_CLKGATE_CON(9), 0, GFLAGS),
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3328.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3328.c
|
||||
@@ -677,9 +677,9 @@ static struct rockchip_clk_branch rk3328
|
||||
RK3328_CLKSEL_CON(27), 15, 1, MFLAGS, 8, 5, DFLAGS,
|
||||
RK3328_CLKGATE_CON(3), 5, GFLAGS),
|
||||
MUXGRF(SCLK_MAC2IO, "clk_mac2io", mux_mac2io_src_p, CLK_SET_RATE_NO_REPARENT,
|
||||
- RK3328_GRF_MAC_CON1, 10, 1, MFLAGS),
|
||||
+ RK3328_GRF_MAC_CON1, 10, 1, MFLAGS, grf_type_sys),
|
||||
MUXGRF(SCLK_MAC2IO_EXT, "clk_mac2io_ext", mux_mac2io_ext_p, CLK_SET_RATE_NO_REPARENT,
|
||||
- RK3328_GRF_SOC_CON4, 14, 1, MFLAGS),
|
||||
+ RK3328_GRF_SOC_CON4, 14, 1, MFLAGS, grf_type_sys),
|
||||
|
||||
COMPOSITE(SCLK_MAC2PHY_SRC, "clk_mac2phy_src", mux_2plls_p, 0,
|
||||
RK3328_CLKSEL_CON(26), 7, 1, MFLAGS, 0, 5, DFLAGS,
|
||||
@@ -692,7 +692,7 @@ static struct rockchip_clk_branch rk3328
|
||||
RK3328_CLKSEL_CON(26), 8, 2, DFLAGS,
|
||||
RK3328_CLKGATE_CON(9), 2, GFLAGS),
|
||||
MUXGRF(SCLK_MAC2PHY, "clk_mac2phy", mux_mac2phy_src_p, CLK_SET_RATE_NO_REPARENT,
|
||||
- RK3328_GRF_MAC_CON2, 10, 1, MFLAGS),
|
||||
+ RK3328_GRF_MAC_CON2, 10, 1, MFLAGS, grf_type_sys),
|
||||
|
||||
FACTOR(0, "xin12m", "xin24m", 0, 1, 2),
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3568.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3568.c
|
||||
@@ -590,7 +590,7 @@ static struct rockchip_clk_branch rk3568
|
||||
RK3568_CLKSEL_CON(9), 6, 2, MFLAGS, 0, 5, DFLAGS,
|
||||
RK3568_CLKGATE_CON(4), 0, GFLAGS),
|
||||
MUXGRF(CLK_DDR1X, "clk_ddr1x", clk_ddr1x_p, CLK_SET_RATE_PARENT,
|
||||
- RK3568_CLKSEL_CON(9), 15, 1, MFLAGS),
|
||||
+ RK3568_CLKSEL_CON(9), 15, 1, MFLAGS, grf_type_sys),
|
||||
|
||||
COMPOSITE_NOMUX(CLK_MSCH, "clk_msch", "clk_ddr1x", CLK_IGNORE_UNUSED,
|
||||
RK3568_CLKSEL_CON(10), 0, 2, DFLAGS,
|
||||
--- a/drivers/clk/rockchip/clk-rk3576.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3576.c
|
||||
@@ -1678,13 +1678,13 @@ static struct rockchip_clk_branch rk3576
|
||||
|
||||
/* phy ref */
|
||||
MUXGRF(CLK_PHY_REF_SRC, "clk_phy_ref_src", clk_phy_ref_src_p, 0,
|
||||
- RK3576_PMU0_GRF_OSC_CON6, 4, 1, MFLAGS),
|
||||
+ RK3576_PMU0_GRF_OSC_CON6, 4, 1, MFLAGS, grf_type_pmu0),
|
||||
MUXGRF(CLK_USBPHY_REF_SRC, "clk_usbphy_ref_src", clk_usbphy_ref_src_p, 0,
|
||||
- RK3576_PMU0_GRF_OSC_CON6, 2, 1, MFLAGS),
|
||||
+ RK3576_PMU0_GRF_OSC_CON6, 2, 1, MFLAGS, grf_type_pmu0),
|
||||
MUXGRF(CLK_CPLL_REF_SRC, "clk_cpll_ref_src", clk_cpll_ref_src_p, 0,
|
||||
- RK3576_PMU0_GRF_OSC_CON6, 1, 1, MFLAGS),
|
||||
+ RK3576_PMU0_GRF_OSC_CON6, 1, 1, MFLAGS, grf_type_pmu0),
|
||||
MUXGRF(CLK_AUPLL_REF_SRC, "clk_aupll_ref_src", clk_aupll_ref_src_p, 0,
|
||||
- RK3576_PMU0_GRF_OSC_CON6, 0, 1, MFLAGS),
|
||||
+ RK3576_PMU0_GRF_OSC_CON6, 0, 1, MFLAGS, grf_type_pmu0),
|
||||
|
||||
/* secure ns */
|
||||
COMPOSITE_NODIV(ACLK_SECURE_NS, "aclk_secure_ns", mux_350m_175m_116m_24m_p, CLK_IS_CRITICAL,
|
||||
@@ -1727,13 +1727,14 @@ static void __init rk3576_clk_init(struc
|
||||
struct rockchip_clk_provider *ctx;
|
||||
unsigned long clk_nr_clks;
|
||||
void __iomem *reg_base;
|
||||
- struct regmap *grf;
|
||||
+ struct rockchip_aux_grf *pmu0_grf_e;
|
||||
+ struct regmap *pmu0_grf;
|
||||
|
||||
clk_nr_clks = rockchip_clk_find_max_clk_id(rk3576_clk_branches,
|
||||
ARRAY_SIZE(rk3576_clk_branches)) + 1;
|
||||
|
||||
- grf = syscon_regmap_lookup_by_compatible("rockchip,rk3576-pmu0-grf");
|
||||
- if (IS_ERR(grf)) {
|
||||
+ pmu0_grf = syscon_regmap_lookup_by_compatible("rockchip,rk3576-pmu0-grf");
|
||||
+ if (IS_ERR(pmu0_grf)) {
|
||||
pr_err("%s: could not get PMU0 GRF syscon\n", __func__);
|
||||
return;
|
||||
}
|
||||
@@ -1747,11 +1748,16 @@ static void __init rk3576_clk_init(struc
|
||||
ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
|
||||
if (IS_ERR(ctx)) {
|
||||
pr_err("%s: rockchip clk init failed\n", __func__);
|
||||
- iounmap(reg_base);
|
||||
- return;
|
||||
+ goto err_unmap;
|
||||
}
|
||||
|
||||
- ctx->grf = grf;
|
||||
+ pmu0_grf_e = kzalloc(sizeof(*pmu0_grf_e), GFP_KERNEL);
|
||||
+ if (!pmu0_grf_e)
|
||||
+ goto err_unmap;
|
||||
+
|
||||
+ pmu0_grf_e->grf = pmu0_grf;
|
||||
+ pmu0_grf_e->type = grf_type_pmu0;
|
||||
+ hash_add(ctx->aux_grf_table, &pmu0_grf_e->node, grf_type_pmu0);
|
||||
|
||||
rockchip_clk_register_plls(ctx, rk3576_pll_clks,
|
||||
ARRAY_SIZE(rk3576_pll_clks),
|
||||
@@ -1774,6 +1780,12 @@ static void __init rk3576_clk_init(struc
|
||||
rockchip_register_restart_notifier(ctx, RK3576_GLB_SRST_FST, NULL);
|
||||
|
||||
rockchip_clk_of_add_provider(np, ctx);
|
||||
+
|
||||
+ return;
|
||||
+
|
||||
+err_unmap:
|
||||
+ iounmap(reg_base);
|
||||
+ return;
|
||||
}
|
||||
|
||||
CLK_OF_DECLARE(rk3576_cru, "rockchip,rk3576-cru", rk3576_clk_init);
|
||||
--- a/drivers/clk/rockchip/clk-rv1126.c
|
||||
+++ b/drivers/clk/rockchip/clk-rv1126.c
|
||||
@@ -857,7 +857,7 @@ static struct rockchip_clk_branch rv1126
|
||||
RV1126_GMAC_CON, 5, 1, MFLAGS),
|
||||
MUXGRF(CLK_GMAC_SRC, "clk_gmac_src", mux_clk_gmac_src_p, CLK_SET_RATE_PARENT |
|
||||
CLK_SET_RATE_NO_REPARENT,
|
||||
- RV1126_GRF_IOFUNC_CON1, 12, 1, MFLAGS),
|
||||
+ RV1126_GRF_IOFUNC_CON1, 12, 1, MFLAGS, grf_type_sys),
|
||||
|
||||
GATE(CLK_GMAC_REF, "clk_gmac_ref", "clk_gmac_src", 0,
|
||||
RV1126_CLKGATE_CON(20), 7, GFLAGS),
|
||||
--- a/drivers/clk/rockchip/clk.c
|
||||
+++ b/drivers/clk/rockchip/clk.c
|
||||
@@ -382,6 +382,8 @@ static struct rockchip_clk_provider *roc
|
||||
ctx->cru_node = np;
|
||||
spin_lock_init(&ctx->lock);
|
||||
|
||||
+ hash_init(ctx->aux_grf_table);
|
||||
+
|
||||
ctx->grf = syscon_regmap_lookup_by_phandle(ctx->cru_node,
|
||||
"rockchip,grf");
|
||||
|
||||
@@ -496,6 +498,8 @@ void rockchip_clk_register_branches(stru
|
||||
struct rockchip_clk_branch *list,
|
||||
unsigned int nr_clk)
|
||||
{
|
||||
+ struct regmap *grf = ctx->grf;
|
||||
+ struct rockchip_aux_grf *agrf;
|
||||
struct clk *clk;
|
||||
unsigned int idx;
|
||||
unsigned long flags;
|
||||
@@ -504,6 +508,17 @@ void rockchip_clk_register_branches(stru
|
||||
flags = list->flags;
|
||||
clk = NULL;
|
||||
|
||||
+ /* for GRF-dependent branches, choose the right grf first */
|
||||
+ if (list->branch_type == branch_muxgrf &&
|
||||
+ list->grf_type != grf_type_sys) {
|
||||
+ hash_for_each_possible(ctx->aux_grf_table, agrf, node, list->grf_type) {
|
||||
+ if (agrf->type == list->grf_type) {
|
||||
+ grf = agrf->grf;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* catch simple muxes */
|
||||
switch (list->branch_type) {
|
||||
case branch_mux:
|
||||
@@ -526,7 +541,7 @@ void rockchip_clk_register_branches(stru
|
||||
case branch_muxgrf:
|
||||
clk = rockchip_clk_register_muxgrf(list->name,
|
||||
list->parent_names, list->num_parents,
|
||||
- flags, ctx->grf, list->muxdiv_offset,
|
||||
+ flags, grf, list->muxdiv_offset,
|
||||
list->mux_shift, list->mux_width,
|
||||
list->mux_flags);
|
||||
break;
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/clk-provider.h>
|
||||
+#include <linux/hashtable.h>
|
||||
|
||||
struct clk;
|
||||
|
||||
@@ -381,12 +382,35 @@ enum rockchip_pll_type {
|
||||
.k = _k, \
|
||||
}
|
||||
|
||||
+enum rockchip_grf_type {
|
||||
+ grf_type_sys = 0,
|
||||
+ grf_type_pmu0,
|
||||
+ grf_type_pmu1,
|
||||
+ grf_type_ioc,
|
||||
+};
|
||||
+
|
||||
+/* ceil(sqrt(enums in rockchip_grf_type - 1)) */
|
||||
+#define GRF_HASH_ORDER 2
|
||||
+
|
||||
+/**
|
||||
+ * struct rockchip_aux_grf - entry for the aux_grf_table hashtable
|
||||
+ * @grf: pointer to the grf this entry references
|
||||
+ * @type: what type of GRF this is
|
||||
+ * @node: hlist node
|
||||
+ */
|
||||
+struct rockchip_aux_grf {
|
||||
+ struct regmap *grf;
|
||||
+ enum rockchip_grf_type type;
|
||||
+ struct hlist_node node;
|
||||
+};
|
||||
+
|
||||
/**
|
||||
* struct rockchip_clk_provider - information about clock provider
|
||||
* @reg_base: virtual address for the register base.
|
||||
* @clk_data: holds clock related data like clk* and number of clocks.
|
||||
* @cru_node: device-node of the clock-provider
|
||||
* @grf: regmap of the general-register-files syscon
|
||||
+ * @aux_grf_table: hashtable of auxiliary GRF regmaps, indexed by grf_type
|
||||
* @lock: maintains exclusion between callbacks for a given clock-provider.
|
||||
*/
|
||||
struct rockchip_clk_provider {
|
||||
@@ -394,6 +418,7 @@ struct rockchip_clk_provider {
|
||||
struct clk_onecell_data clk_data;
|
||||
struct device_node *cru_node;
|
||||
struct regmap *grf;
|
||||
+ DECLARE_HASHTABLE(aux_grf_table, GRF_HASH_ORDER);
|
||||
spinlock_t lock;
|
||||
};
|
||||
|
||||
@@ -599,6 +624,7 @@ struct rockchip_clk_branch {
|
||||
u8 gate_shift;
|
||||
u8 gate_flags;
|
||||
unsigned int linked_clk_id;
|
||||
+ enum rockchip_grf_type grf_type;
|
||||
struct rockchip_clk_branch *child;
|
||||
};
|
||||
|
||||
@@ -839,7 +865,7 @@ struct rockchip_clk_branch {
|
||||
.mux_table = mt, \
|
||||
}
|
||||
|
||||
-#define MUXGRF(_id, cname, pnames, f, o, s, w, mf) \
|
||||
+#define MUXGRF(_id, cname, pnames, f, o, s, w, mf, gt) \
|
||||
{ \
|
||||
.id = _id, \
|
||||
.branch_type = branch_muxgrf, \
|
||||
@@ -852,6 +878,7 @@ struct rockchip_clk_branch {
|
||||
.mux_width = w, \
|
||||
.mux_flags = mf, \
|
||||
.gate_offset = -1, \
|
||||
+ .grf_type = gt, \
|
||||
}
|
||||
|
||||
#define DIV(_id, cname, pname, f, o, s, w, df) \
|
||||
+213
@@ -0,0 +1,213 @@
|
||||
From e277168cabe9fd99e647f5dad0bc846d5d6b0093 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Fri, 2 May 2025 13:03:09 +0200
|
||||
Subject: [PATCH] clk: rockchip: introduce GRF gates
|
||||
|
||||
Some rockchip SoCs, namely the RK3576, have bits in a General Register
|
||||
File (GRF) that act just like clock gates. The downstream vendor kernel
|
||||
simply maps over the already mapped GRF range with a generic clock gate
|
||||
driver. This solution isn't suitable for upstream, as a memory range
|
||||
will be in use by multiple drivers at the same time, and it leaks
|
||||
implementation details into the device tree.
|
||||
|
||||
Instead, implement this with a new clock branch type in the Rockchip
|
||||
clock driver: GRF gates. Somewhat akin to MUXGRF, this clock branch
|
||||
depends on the type of GRF, but functions like a gate instead.
|
||||
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250502-rk3576-sai-v3-3-376cef19dd7c@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/Makefile | 1 +
|
||||
drivers/clk/rockchip/clk.c | 9 ++-
|
||||
drivers/clk/rockchip/clk.h | 20 ++++++
|
||||
drivers/clk/rockchip/gate-grf.c | 105 ++++++++++++++++++++++++++++++++
|
||||
4 files changed, 134 insertions(+), 1 deletion(-)
|
||||
create mode 100644 drivers/clk/rockchip/gate-grf.c
|
||||
|
||||
--- a/drivers/clk/rockchip/Makefile
|
||||
+++ b/drivers/clk/rockchip/Makefile
|
||||
@@ -14,6 +14,7 @@ clk-rockchip-y += clk-mmc-phase.o
|
||||
clk-rockchip-y += clk-muxgrf.o
|
||||
clk-rockchip-y += clk-ddr.o
|
||||
clk-rockchip-y += gate-link.o
|
||||
+clk-rockchip-y += gate-grf.o
|
||||
clk-rockchip-$(CONFIG_RESET_CONTROLLER) += softrst.o
|
||||
|
||||
obj-$(CONFIG_CLK_PX30) += clk-px30.o
|
||||
--- a/drivers/clk/rockchip/clk.c
|
||||
+++ b/drivers/clk/rockchip/clk.c
|
||||
@@ -509,7 +509,7 @@ void rockchip_clk_register_branches(stru
|
||||
clk = NULL;
|
||||
|
||||
/* for GRF-dependent branches, choose the right grf first */
|
||||
- if (list->branch_type == branch_muxgrf &&
|
||||
+ if ((list->branch_type == branch_muxgrf || list->branch_type == branch_grf_gate) &&
|
||||
list->grf_type != grf_type_sys) {
|
||||
hash_for_each_possible(ctx->aux_grf_table, agrf, node, list->grf_type) {
|
||||
if (agrf->type == list->grf_type) {
|
||||
@@ -588,6 +588,13 @@ void rockchip_clk_register_branches(stru
|
||||
ctx->reg_base + list->gate_offset,
|
||||
list->gate_shift, list->gate_flags, &ctx->lock);
|
||||
break;
|
||||
+ case branch_grf_gate:
|
||||
+ flags |= CLK_SET_RATE_PARENT;
|
||||
+ clk = rockchip_clk_register_gate_grf(list->name,
|
||||
+ list->parent_names[0], flags, grf,
|
||||
+ list->gate_offset, list->gate_shift,
|
||||
+ list->gate_flags);
|
||||
+ break;
|
||||
case branch_composite:
|
||||
clk = rockchip_clk_register_branch(list->name,
|
||||
list->parent_names, list->num_parents,
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -586,6 +586,11 @@ struct clk *rockchip_clk_register_muxgrf
|
||||
int flags, struct regmap *grf, int reg,
|
||||
int shift, int width, int mux_flags);
|
||||
|
||||
+struct clk *rockchip_clk_register_gate_grf(const char *name,
|
||||
+ const char *parent_name, unsigned long flags,
|
||||
+ struct regmap *regmap, unsigned int reg,
|
||||
+ unsigned int shift, u8 gate_flags);
|
||||
+
|
||||
#define PNAME(x) static const char *const x[] __initconst
|
||||
|
||||
enum rockchip_clk_branch_type {
|
||||
@@ -595,6 +600,7 @@ enum rockchip_clk_branch_type {
|
||||
branch_divider,
|
||||
branch_fraction_divider,
|
||||
branch_gate,
|
||||
+ branch_grf_gate,
|
||||
branch_linked_gate,
|
||||
branch_mmc,
|
||||
branch_inverter,
|
||||
@@ -924,6 +930,20 @@ struct rockchip_clk_branch {
|
||||
.gate_flags = gf, \
|
||||
}
|
||||
|
||||
+#define GATE_GRF(_id, cname, pname, f, o, b, gf, gt) \
|
||||
+ { \
|
||||
+ .id = _id, \
|
||||
+ .branch_type = branch_grf_gate, \
|
||||
+ .name = cname, \
|
||||
+ .parent_names = (const char *[]){ pname }, \
|
||||
+ .num_parents = 1, \
|
||||
+ .flags = f, \
|
||||
+ .gate_offset = o, \
|
||||
+ .gate_shift = b, \
|
||||
+ .gate_flags = gf, \
|
||||
+ .grf_type = gt, \
|
||||
+ }
|
||||
+
|
||||
#define GATE_LINK(_id, cname, pname, linkedclk, f, o, b, gf) \
|
||||
{ \
|
||||
.id = _id, \
|
||||
--- /dev/null
|
||||
+++ b/drivers/clk/rockchip/gate-grf.c
|
||||
@@ -0,0 +1,105 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+/*
|
||||
+ * Copyright (c) 2025 Collabora Ltd.
|
||||
+ * Author: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
+ *
|
||||
+ * Certain clocks on Rockchip are "gated" behind an additional register bit
|
||||
+ * write in a GRF register, such as the SAI MCLKs on RK3576. This code
|
||||
+ * implements a clock driver for these types of gates, based on regmaps.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/clk.h>
|
||||
+#include <linux/clk-provider.h>
|
||||
+#include <linux/regmap.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include "clk.h"
|
||||
+
|
||||
+struct rockchip_gate_grf {
|
||||
+ struct clk_hw hw;
|
||||
+ struct regmap *regmap;
|
||||
+ unsigned int reg;
|
||||
+ unsigned int shift;
|
||||
+ u8 flags;
|
||||
+};
|
||||
+
|
||||
+#define to_gate_grf(_hw) container_of(_hw, struct rockchip_gate_grf, hw)
|
||||
+
|
||||
+static int rockchip_gate_grf_enable(struct clk_hw *hw)
|
||||
+{
|
||||
+ struct rockchip_gate_grf *gate = to_gate_grf(hw);
|
||||
+ u32 val = !(gate->flags & CLK_GATE_SET_TO_DISABLE) ? BIT(gate->shift) : 0;
|
||||
+ u32 hiword = ((gate->flags & CLK_GATE_HIWORD_MASK) ? 1 : 0) << (gate->shift + 16);
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = regmap_update_bits(gate->regmap, gate->reg,
|
||||
+ hiword | BIT(gate->shift), hiword | val);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static void rockchip_gate_grf_disable(struct clk_hw *hw)
|
||||
+{
|
||||
+ struct rockchip_gate_grf *gate = to_gate_grf(hw);
|
||||
+ u32 val = !(gate->flags & CLK_GATE_SET_TO_DISABLE) ? 0 : BIT(gate->shift);
|
||||
+ u32 hiword = ((gate->flags & CLK_GATE_HIWORD_MASK) ? 1 : 0) << (gate->shift + 16);
|
||||
+
|
||||
+ regmap_update_bits(gate->regmap, gate->reg,
|
||||
+ hiword | BIT(gate->shift), hiword | val);
|
||||
+}
|
||||
+
|
||||
+static int rockchip_gate_grf_is_enabled(struct clk_hw *hw)
|
||||
+{
|
||||
+ struct rockchip_gate_grf *gate = to_gate_grf(hw);
|
||||
+ bool invert = !!(gate->flags & CLK_GATE_SET_TO_DISABLE);
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = regmap_test_bits(gate->regmap, gate->reg, BIT(gate->shift));
|
||||
+ if (ret < 0)
|
||||
+ ret = 0;
|
||||
+
|
||||
+ return invert ? 1 - ret : ret;
|
||||
+
|
||||
+}
|
||||
+
|
||||
+static const struct clk_ops rockchip_gate_grf_ops = {
|
||||
+ .enable = rockchip_gate_grf_enable,
|
||||
+ .disable = rockchip_gate_grf_disable,
|
||||
+ .is_enabled = rockchip_gate_grf_is_enabled,
|
||||
+};
|
||||
+
|
||||
+struct clk *rockchip_clk_register_gate_grf(const char *name,
|
||||
+ const char *parent_name, unsigned long flags,
|
||||
+ struct regmap *regmap, unsigned int reg, unsigned int shift,
|
||||
+ u8 gate_flags)
|
||||
+{
|
||||
+ struct rockchip_gate_grf *gate;
|
||||
+ struct clk_init_data init;
|
||||
+ struct clk *clk;
|
||||
+
|
||||
+ if (IS_ERR(regmap)) {
|
||||
+ pr_err("%s: regmap not available\n", __func__);
|
||||
+ return ERR_PTR(-EOPNOTSUPP);
|
||||
+ }
|
||||
+
|
||||
+ gate = kzalloc(sizeof(*gate), GFP_KERNEL);
|
||||
+ if (!gate)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ init.name = name;
|
||||
+ init.flags = flags;
|
||||
+ init.num_parents = parent_name ? 1 : 0;
|
||||
+ init.parent_names = parent_name ? &parent_name : NULL;
|
||||
+ init.ops = &rockchip_gate_grf_ops;
|
||||
+
|
||||
+ gate->hw.init = &init;
|
||||
+ gate->regmap = regmap;
|
||||
+ gate->reg = reg;
|
||||
+ gate->shift = shift;
|
||||
+ gate->flags = gate_flags;
|
||||
+
|
||||
+ clk = clk_register(NULL, &gate->hw);
|
||||
+ if (IS_ERR(clk))
|
||||
+ kfree(gate);
|
||||
+
|
||||
+ return clk;
|
||||
+}
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
From 9199ec29f0977efee223791c9ee3eb402d23f8ba Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Date: Fri, 2 May 2025 13:03:10 +0200
|
||||
Subject: [PATCH] clk: rockchip: add GATE_GRFs for SAI MCLKOUT to rk3576
|
||||
|
||||
The Rockchip RK3576 gates the SAI MCLKOUT clocks behind some IOC GRF
|
||||
writes.
|
||||
|
||||
Add these clock branches, and add the IOC GRF to the auxiliary GRF
|
||||
hashtable.
|
||||
|
||||
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Link: https://lore.kernel.org/r/20250502-rk3576-sai-v3-4-376cef19dd7c@collabora.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3576.c | 27 +++++++++++++++++++++++++++
|
||||
1 file changed, 27 insertions(+)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3576.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3576.c
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#define RK3576_GRF_SOC_STATUS0 0x600
|
||||
#define RK3576_PMU0_GRF_OSC_CON6 0x18
|
||||
+#define RK3576_VCCIO_IOC_MISC_CON0 0x6400
|
||||
|
||||
enum rk3576_plls {
|
||||
bpll, lpll, vpll, aupll, cpll, gpll, ppll,
|
||||
@@ -1481,6 +1482,14 @@ static struct rockchip_clk_branch rk3576
|
||||
RK3576_CLKGATE_CON(10), 0, GFLAGS),
|
||||
GATE(CLK_SAI0_MCLKOUT, "clk_sai0_mclkout", "mclk_sai0_8ch", 0,
|
||||
RK3576_CLKGATE_CON(10), 1, GFLAGS),
|
||||
+ GATE_GRF(CLK_SAI0_MCLKOUT_TO_IO, "mclk_sai0_to_io", "clk_sai0_mclkout",
|
||||
+ 0, RK3576_VCCIO_IOC_MISC_CON0, 0, GFLAGS, grf_type_ioc),
|
||||
+ GATE_GRF(CLK_SAI1_MCLKOUT_TO_IO, "mclk_sai1_to_io", "clk_sai1_mclkout",
|
||||
+ 0, RK3576_VCCIO_IOC_MISC_CON0, 1, GFLAGS, grf_type_ioc),
|
||||
+ GATE_GRF(CLK_SAI2_MCLKOUT_TO_IO, "mclk_sai2_to_io", "clk_sai2_mclkout",
|
||||
+ 0, RK3576_VCCIO_IOC_MISC_CON0, 2, GFLAGS, grf_type_ioc),
|
||||
+ GATE_GRF(CLK_SAI3_MCLKOUT_TO_IO, "mclk_sai3_to_io", "clk_sai3_mclkout",
|
||||
+ 0, RK3576_VCCIO_IOC_MISC_CON0, 3, GFLAGS, grf_type_ioc),
|
||||
|
||||
/* sdgmac */
|
||||
COMPOSITE_NODIV(HCLK_SDGMAC_ROOT, "hclk_sdgmac_root", mux_200m_100m_50m_24m_p, 0,
|
||||
@@ -1727,7 +1736,9 @@ static void __init rk3576_clk_init(struc
|
||||
struct rockchip_clk_provider *ctx;
|
||||
unsigned long clk_nr_clks;
|
||||
void __iomem *reg_base;
|
||||
+ struct rockchip_aux_grf *ioc_grf_e;
|
||||
struct rockchip_aux_grf *pmu0_grf_e;
|
||||
+ struct regmap *ioc_grf;
|
||||
struct regmap *pmu0_grf;
|
||||
|
||||
clk_nr_clks = rockchip_clk_find_max_clk_id(rk3576_clk_branches,
|
||||
@@ -1739,6 +1750,12 @@ static void __init rk3576_clk_init(struc
|
||||
return;
|
||||
}
|
||||
|
||||
+ ioc_grf = syscon_regmap_lookup_by_compatible("rockchip,rk3576-ioc-grf");
|
||||
+ if (IS_ERR(ioc_grf)) {
|
||||
+ pr_err("%s: could not get IOC GRF syscon\n", __func__);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
reg_base = of_iomap(np, 0);
|
||||
if (!reg_base) {
|
||||
pr_err("%s: could not map cru region\n", __func__);
|
||||
@@ -1759,6 +1776,14 @@ static void __init rk3576_clk_init(struc
|
||||
pmu0_grf_e->type = grf_type_pmu0;
|
||||
hash_add(ctx->aux_grf_table, &pmu0_grf_e->node, grf_type_pmu0);
|
||||
|
||||
+ ioc_grf_e = kzalloc(sizeof(*ioc_grf_e), GFP_KERNEL);
|
||||
+ if (!ioc_grf_e)
|
||||
+ goto err_free_pmu0;
|
||||
+
|
||||
+ ioc_grf_e->grf = ioc_grf;
|
||||
+ ioc_grf_e->type = grf_type_ioc;
|
||||
+ hash_add(ctx->aux_grf_table, &ioc_grf_e->node, grf_type_ioc);
|
||||
+
|
||||
rockchip_clk_register_plls(ctx, rk3576_pll_clks,
|
||||
ARRAY_SIZE(rk3576_pll_clks),
|
||||
RK3576_GRF_SOC_STATUS0);
|
||||
@@ -1783,6 +1808,8 @@ static void __init rk3576_clk_init(struc
|
||||
|
||||
return;
|
||||
|
||||
+err_free_pmu0:
|
||||
+ kfree(pmu0_grf_e);
|
||||
err_unmap:
|
||||
iounmap(reg_base);
|
||||
return;
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
From 92da5c3cba23ee4be2c043bb63a551c89c48de18 Mon Sep 17 00:00:00 2001
|
||||
From: Heiko Stuebner <heiko@sntech.de>
|
||||
Date: Thu, 15 May 2025 10:26:51 +0200
|
||||
Subject: [PATCH] clk: rockchip: rk3576: add missing slab.h include
|
||||
|
||||
The change for auxiliary GRFs introduced kzalloc usage into the rk3576 clock
|
||||
driver, but missed adding the header for its prototype. Add it now.
|
||||
|
||||
Reported-by: kernel test robot <lkp@intel.com>
|
||||
Closes: https://lore.kernel.org/oe-kbuild-all/202505150941.KWKskr2c-lkp@intel.com/
|
||||
Fixes: 70a114daf207 ("clk: rockchip: introduce auxiliary GRFs")
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Link: https://lore.kernel.org/r/20250515082652.2503063-1-heiko@sntech.de
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3576.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3576.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3576.c
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/syscore_ops.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
+#include <linux/slab.h>
|
||||
#include <dt-bindings/clock/rockchip,rk3576-cru.h>
|
||||
#include "clk.h"
|
||||
|
||||
+792
@@ -0,0 +1,792 @@
|
||||
From e0c0a97bc308f71b0934e3637ac545ce65195df0 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Mon, 17 Feb 2025 06:11:42 +0000
|
||||
Subject: [PATCH] dt-bindings: clock: Document clock and reset unit of RK3528
|
||||
|
||||
There are two types of clocks in RK3528 SoC, CRU-managed and
|
||||
SCMI-managed. Independent IDs are assigned to them.
|
||||
|
||||
For the reset part, differing from previous Rockchip SoCs and
|
||||
downstream bindings which embeds register offsets into the IDs, gapless
|
||||
numbers starting from zero are used.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20250217061142.38480-6-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
.../bindings/clock/rockchip,rk3528-cru.yaml | 64 +++
|
||||
.../dt-bindings/clock/rockchip,rk3528-cru.h | 453 ++++++++++++++++++
|
||||
.../dt-bindings/reset/rockchip,rk3528-cru.h | 241 ++++++++++
|
||||
3 files changed, 758 insertions(+)
|
||||
create mode 100644 Documentation/devicetree/bindings/clock/rockchip,rk3528-cru.yaml
|
||||
create mode 100644 include/dt-bindings/clock/rockchip,rk3528-cru.h
|
||||
create mode 100644 include/dt-bindings/reset/rockchip,rk3528-cru.h
|
||||
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/clock/rockchip,rk3528-cru.yaml
|
||||
@@ -0,0 +1,64 @@
|
||||
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
+%YAML 1.2
|
||||
+---
|
||||
+$id: http://devicetree.org/schemas/clock/rockchip,rk3528-cru.yaml#
|
||||
+$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
+
|
||||
+title: Rockchip RK3528 Clock and Reset Controller
|
||||
+
|
||||
+maintainers:
|
||||
+ - Yao Zi <ziyao@disroot.org>
|
||||
+
|
||||
+description: |
|
||||
+ The RK3528 clock controller generates the clock and also implements a reset
|
||||
+ controller for SoC peripherals. For example, it provides SCLK_UART0 and
|
||||
+ PCLK_UART0 as well as SRST_P_UART0 and SRST_S_UART0 for the first UART
|
||||
+ module.
|
||||
+ Each clock is assigned an identifier, consumer nodes can use it to specify
|
||||
+ the clock. All available clock and reset IDs are defined in dt-binding
|
||||
+ headers.
|
||||
+
|
||||
+properties:
|
||||
+ compatible:
|
||||
+ const: rockchip,rk3528-cru
|
||||
+
|
||||
+ reg:
|
||||
+ maxItems: 1
|
||||
+
|
||||
+ clocks:
|
||||
+ items:
|
||||
+ - description: External 24MHz oscillator clock
|
||||
+ - description: >
|
||||
+ 50MHz clock generated by PHY module, for generating GMAC0 clocks only.
|
||||
+
|
||||
+ clock-names:
|
||||
+ items:
|
||||
+ - const: xin24m
|
||||
+ - const: gmac0
|
||||
+
|
||||
+ "#clock-cells":
|
||||
+ const: 1
|
||||
+
|
||||
+ "#reset-cells":
|
||||
+ const: 1
|
||||
+
|
||||
+required:
|
||||
+ - compatible
|
||||
+ - reg
|
||||
+ - clocks
|
||||
+ - clock-names
|
||||
+ - "#clock-cells"
|
||||
+ - "#reset-cells"
|
||||
+
|
||||
+additionalProperties: false
|
||||
+
|
||||
+examples:
|
||||
+ - |
|
||||
+ clock-controller@ff4a0000 {
|
||||
+ compatible = "rockchip,rk3528-cru";
|
||||
+ reg = <0xff4a0000 0x30000>;
|
||||
+ clocks = <&xin24m>, <&gmac0_clk>;
|
||||
+ clock-names = "xin24m", "gmac0";
|
||||
+ #clock-cells = <1>;
|
||||
+ #reset-cells = <1>;
|
||||
+ };
|
||||
--- /dev/null
|
||||
+++ b/include/dt-bindings/clock/rockchip,rk3528-cru.h
|
||||
@@ -0,0 +1,453 @@
|
||||
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
|
||||
+/*
|
||||
+ * Copyright (c) 2022 Rockchip Electronics Co. Ltd.
|
||||
+ * Copyright (c) 2024 Yao Zi <ziyao@disroot.org>
|
||||
+ * Author: Joseph Chen <chenjh@rock-chips.com>
|
||||
+ */
|
||||
+
|
||||
+#ifndef _DT_BINDINGS_CLK_ROCKCHIP_RK3528_H
|
||||
+#define _DT_BINDINGS_CLK_ROCKCHIP_RK3528_H
|
||||
+
|
||||
+/* cru-clocks indices */
|
||||
+#define PLL_APLL 0
|
||||
+#define PLL_CPLL 1
|
||||
+#define PLL_GPLL 2
|
||||
+#define PLL_PPLL 3
|
||||
+#define PLL_DPLL 4
|
||||
+#define ARMCLK 5
|
||||
+#define XIN_OSC0_HALF 6
|
||||
+#define CLK_MATRIX_50M_SRC 7
|
||||
+#define CLK_MATRIX_100M_SRC 8
|
||||
+#define CLK_MATRIX_150M_SRC 9
|
||||
+#define CLK_MATRIX_200M_SRC 10
|
||||
+#define CLK_MATRIX_250M_SRC 11
|
||||
+#define CLK_MATRIX_300M_SRC 12
|
||||
+#define CLK_MATRIX_339M_SRC 13
|
||||
+#define CLK_MATRIX_400M_SRC 14
|
||||
+#define CLK_MATRIX_500M_SRC 15
|
||||
+#define CLK_MATRIX_600M_SRC 16
|
||||
+#define CLK_UART0_SRC 17
|
||||
+#define CLK_UART0_FRAC 18
|
||||
+#define SCLK_UART0 19
|
||||
+#define CLK_UART1_SRC 20
|
||||
+#define CLK_UART1_FRAC 21
|
||||
+#define SCLK_UART1 22
|
||||
+#define CLK_UART2_SRC 23
|
||||
+#define CLK_UART2_FRAC 24
|
||||
+#define SCLK_UART2 25
|
||||
+#define CLK_UART3_SRC 26
|
||||
+#define CLK_UART3_FRAC 27
|
||||
+#define SCLK_UART3 28
|
||||
+#define CLK_UART4_SRC 29
|
||||
+#define CLK_UART4_FRAC 30
|
||||
+#define SCLK_UART4 31
|
||||
+#define CLK_UART5_SRC 32
|
||||
+#define CLK_UART5_FRAC 33
|
||||
+#define SCLK_UART5 34
|
||||
+#define CLK_UART6_SRC 35
|
||||
+#define CLK_UART6_FRAC 36
|
||||
+#define SCLK_UART6 37
|
||||
+#define CLK_UART7_SRC 38
|
||||
+#define CLK_UART7_FRAC 39
|
||||
+#define SCLK_UART7 40
|
||||
+#define CLK_I2S0_2CH_SRC 41
|
||||
+#define CLK_I2S0_2CH_FRAC 42
|
||||
+#define MCLK_I2S0_2CH_SAI_SRC 43
|
||||
+#define CLK_I2S3_8CH_SRC 44
|
||||
+#define CLK_I2S3_8CH_FRAC 45
|
||||
+#define MCLK_I2S3_8CH_SAI_SRC 46
|
||||
+#define CLK_I2S1_8CH_SRC 47
|
||||
+#define CLK_I2S1_8CH_FRAC 48
|
||||
+#define MCLK_I2S1_8CH_SAI_SRC 49
|
||||
+#define CLK_I2S2_2CH_SRC 50
|
||||
+#define CLK_I2S2_2CH_FRAC 51
|
||||
+#define MCLK_I2S2_2CH_SAI_SRC 52
|
||||
+#define CLK_SPDIF_SRC 53
|
||||
+#define CLK_SPDIF_FRAC 54
|
||||
+#define MCLK_SPDIF_SRC 55
|
||||
+#define DCLK_VOP_SRC0 56
|
||||
+#define DCLK_VOP_SRC1 57
|
||||
+#define CLK_HSM 58
|
||||
+#define CLK_CORE_SRC_ACS 59
|
||||
+#define CLK_CORE_SRC_PVTMUX 60
|
||||
+#define CLK_CORE_SRC 61
|
||||
+#define CLK_CORE 62
|
||||
+#define ACLK_M_CORE_BIU 63
|
||||
+#define CLK_CORE_PVTPLL_SRC 64
|
||||
+#define PCLK_DBG 65
|
||||
+#define SWCLKTCK 66
|
||||
+#define CLK_SCANHS_CORE 67
|
||||
+#define CLK_SCANHS_ACLKM_CORE 68
|
||||
+#define CLK_SCANHS_PCLK_DBG 69
|
||||
+#define CLK_SCANHS_PCLK_CPU_BIU 70
|
||||
+#define PCLK_CPU_ROOT 71
|
||||
+#define PCLK_CORE_GRF 72
|
||||
+#define PCLK_DAPLITE_BIU 73
|
||||
+#define PCLK_CPU_BIU 74
|
||||
+#define CLK_REF_PVTPLL_CORE 75
|
||||
+#define ACLK_BUS_VOPGL_ROOT 76
|
||||
+#define ACLK_BUS_VOPGL_BIU 77
|
||||
+#define ACLK_BUS_H_ROOT 78
|
||||
+#define ACLK_BUS_H_BIU 79
|
||||
+#define ACLK_BUS_ROOT 80
|
||||
+#define HCLK_BUS_ROOT 81
|
||||
+#define PCLK_BUS_ROOT 82
|
||||
+#define ACLK_BUS_M_ROOT 83
|
||||
+#define ACLK_SYSMEM_BIU 84
|
||||
+#define CLK_TIMER_ROOT 85
|
||||
+#define ACLK_BUS_BIU 86
|
||||
+#define HCLK_BUS_BIU 87
|
||||
+#define PCLK_BUS_BIU 88
|
||||
+#define PCLK_DFT2APB 89
|
||||
+#define PCLK_BUS_GRF 90
|
||||
+#define ACLK_BUS_M_BIU 91
|
||||
+#define ACLK_GIC 92
|
||||
+#define ACLK_SPINLOCK 93
|
||||
+#define ACLK_DMAC 94
|
||||
+#define PCLK_TIMER 95
|
||||
+#define CLK_TIMER0 96
|
||||
+#define CLK_TIMER1 97
|
||||
+#define CLK_TIMER2 98
|
||||
+#define CLK_TIMER3 99
|
||||
+#define CLK_TIMER4 100
|
||||
+#define CLK_TIMER5 101
|
||||
+#define PCLK_JDBCK_DAP 102
|
||||
+#define CLK_JDBCK_DAP 103
|
||||
+#define PCLK_WDT_NS 104
|
||||
+#define TCLK_WDT_NS 105
|
||||
+#define HCLK_TRNG_NS 106
|
||||
+#define PCLK_UART0 107
|
||||
+#define PCLK_DMA2DDR 108
|
||||
+#define ACLK_DMA2DDR 109
|
||||
+#define PCLK_PWM0 110
|
||||
+#define CLK_PWM0 111
|
||||
+#define CLK_CAPTURE_PWM0 112
|
||||
+#define PCLK_PWM1 113
|
||||
+#define CLK_PWM1 114
|
||||
+#define CLK_CAPTURE_PWM1 115
|
||||
+#define PCLK_SCR 116
|
||||
+#define ACLK_DCF 117
|
||||
+#define PCLK_INTMUX 118
|
||||
+#define CLK_PPLL_I 119
|
||||
+#define CLK_PPLL_MUX 120
|
||||
+#define CLK_PPLL_100M_MATRIX 121
|
||||
+#define CLK_PPLL_50M_MATRIX 122
|
||||
+#define CLK_REF_PCIE_INNER_PHY 123
|
||||
+#define CLK_REF_PCIE_100M_PHY 124
|
||||
+#define ACLK_VPU_L_ROOT 125
|
||||
+#define CLK_GMAC1_VPU_25M 126
|
||||
+#define CLK_PPLL_125M_MATRIX 127
|
||||
+#define ACLK_VPU_ROOT 128
|
||||
+#define HCLK_VPU_ROOT 129
|
||||
+#define PCLK_VPU_ROOT 130
|
||||
+#define ACLK_VPU_BIU 131
|
||||
+#define HCLK_VPU_BIU 132
|
||||
+#define PCLK_VPU_BIU 133
|
||||
+#define ACLK_VPU 134
|
||||
+#define HCLK_VPU 135
|
||||
+#define PCLK_CRU_PCIE 136
|
||||
+#define PCLK_VPU_GRF 137
|
||||
+#define HCLK_SFC 138
|
||||
+#define SCLK_SFC 139
|
||||
+#define CCLK_SRC_EMMC 140
|
||||
+#define HCLK_EMMC 141
|
||||
+#define ACLK_EMMC 142
|
||||
+#define BCLK_EMMC 143
|
||||
+#define TCLK_EMMC 144
|
||||
+#define PCLK_GPIO1 145
|
||||
+#define DBCLK_GPIO1 146
|
||||
+#define ACLK_VPU_L_BIU 147
|
||||
+#define PCLK_VPU_IOC 148
|
||||
+#define HCLK_SAI_I2S0 149
|
||||
+#define MCLK_SAI_I2S0 150
|
||||
+#define HCLK_SAI_I2S2 151
|
||||
+#define MCLK_SAI_I2S2 152
|
||||
+#define PCLK_ACODEC 153
|
||||
+#define MCLK_ACODEC_TX 154
|
||||
+#define PCLK_GPIO3 155
|
||||
+#define DBCLK_GPIO3 156
|
||||
+#define PCLK_SPI1 157
|
||||
+#define CLK_SPI1 158
|
||||
+#define SCLK_IN_SPI1 159
|
||||
+#define PCLK_UART2 160
|
||||
+#define PCLK_UART5 161
|
||||
+#define PCLK_UART6 162
|
||||
+#define PCLK_UART7 163
|
||||
+#define PCLK_I2C3 164
|
||||
+#define CLK_I2C3 165
|
||||
+#define PCLK_I2C5 166
|
||||
+#define CLK_I2C5 167
|
||||
+#define PCLK_I2C6 168
|
||||
+#define CLK_I2C6 169
|
||||
+#define ACLK_MAC_VPU 170
|
||||
+#define PCLK_MAC_VPU 171
|
||||
+#define CLK_GMAC1_RMII_VPU 172
|
||||
+#define CLK_GMAC1_SRC_VPU 173
|
||||
+#define PCLK_PCIE 174
|
||||
+#define CLK_PCIE_AUX 175
|
||||
+#define ACLK_PCIE 176
|
||||
+#define HCLK_PCIE_SLV 177
|
||||
+#define HCLK_PCIE_DBI 178
|
||||
+#define PCLK_PCIE_PHY 179
|
||||
+#define PCLK_PIPE_GRF 180
|
||||
+#define CLK_PIPE_USB3OTG_COMBO 181
|
||||
+#define CLK_UTMI_USB3OTG 182
|
||||
+#define CLK_PCIE_PIPE_PHY 183
|
||||
+#define CCLK_SRC_SDIO0 184
|
||||
+#define HCLK_SDIO0 185
|
||||
+#define CCLK_SRC_SDIO1 186
|
||||
+#define HCLK_SDIO1 187
|
||||
+#define CLK_TS_0 188
|
||||
+#define CLK_TS_1 189
|
||||
+#define PCLK_CAN2 190
|
||||
+#define CLK_CAN2 191
|
||||
+#define PCLK_CAN3 192
|
||||
+#define CLK_CAN3 193
|
||||
+#define PCLK_SARADC 194
|
||||
+#define CLK_SARADC 195
|
||||
+#define PCLK_TSADC 196
|
||||
+#define CLK_TSADC 197
|
||||
+#define CLK_TSADC_TSEN 198
|
||||
+#define ACLK_USB3OTG 199
|
||||
+#define CLK_REF_USB3OTG 200
|
||||
+#define CLK_SUSPEND_USB3OTG 201
|
||||
+#define ACLK_GPU_ROOT 202
|
||||
+#define PCLK_GPU_ROOT 203
|
||||
+#define ACLK_GPU_BIU 204
|
||||
+#define PCLK_GPU_BIU 205
|
||||
+#define ACLK_GPU 206
|
||||
+#define CLK_GPU_PVTPLL_SRC 207
|
||||
+#define ACLK_GPU_MALI 208
|
||||
+#define HCLK_RKVENC_ROOT 209
|
||||
+#define ACLK_RKVENC_ROOT 210
|
||||
+#define PCLK_RKVENC_ROOT 211
|
||||
+#define HCLK_RKVENC_BIU 212
|
||||
+#define ACLK_RKVENC_BIU 213
|
||||
+#define PCLK_RKVENC_BIU 214
|
||||
+#define HCLK_RKVENC 215
|
||||
+#define ACLK_RKVENC 216
|
||||
+#define CLK_CORE_RKVENC 217
|
||||
+#define HCLK_SAI_I2S1 218
|
||||
+#define MCLK_SAI_I2S1 219
|
||||
+#define PCLK_I2C1 220
|
||||
+#define CLK_I2C1 221
|
||||
+#define PCLK_I2C0 222
|
||||
+#define CLK_I2C0 223
|
||||
+#define CLK_UART_JTAG 224
|
||||
+#define PCLK_SPI0 225
|
||||
+#define CLK_SPI0 226
|
||||
+#define SCLK_IN_SPI0 227
|
||||
+#define PCLK_GPIO4 228
|
||||
+#define DBCLK_GPIO4 229
|
||||
+#define PCLK_RKVENC_IOC 230
|
||||
+#define HCLK_SPDIF 231
|
||||
+#define MCLK_SPDIF 232
|
||||
+#define HCLK_PDM 233
|
||||
+#define MCLK_PDM 234
|
||||
+#define PCLK_UART1 235
|
||||
+#define PCLK_UART3 236
|
||||
+#define PCLK_RKVENC_GRF 237
|
||||
+#define PCLK_CAN0 238
|
||||
+#define CLK_CAN0 239
|
||||
+#define PCLK_CAN1 240
|
||||
+#define CLK_CAN1 241
|
||||
+#define ACLK_VO_ROOT 242
|
||||
+#define HCLK_VO_ROOT 243
|
||||
+#define PCLK_VO_ROOT 244
|
||||
+#define ACLK_VO_BIU 245
|
||||
+#define HCLK_VO_BIU 246
|
||||
+#define PCLK_VO_BIU 247
|
||||
+#define HCLK_RGA2E 248
|
||||
+#define ACLK_RGA2E 249
|
||||
+#define CLK_CORE_RGA2E 250
|
||||
+#define HCLK_VDPP 251
|
||||
+#define ACLK_VDPP 252
|
||||
+#define CLK_CORE_VDPP 253
|
||||
+#define PCLK_VO_GRF 254
|
||||
+#define PCLK_CRU 255
|
||||
+#define ACLK_VOP_ROOT 256
|
||||
+#define ACLK_VOP_BIU 257
|
||||
+#define HCLK_VOP 258
|
||||
+#define DCLK_VOP0 259
|
||||
+#define DCLK_VOP1 260
|
||||
+#define ACLK_VOP 261
|
||||
+#define PCLK_HDMI 262
|
||||
+#define CLK_SFR_HDMI 263
|
||||
+#define CLK_CEC_HDMI 264
|
||||
+#define CLK_SPDIF_HDMI 265
|
||||
+#define CLK_HDMIPHY_TMDSSRC 266
|
||||
+#define CLK_HDMIPHY_PREP 267
|
||||
+#define PCLK_HDMIPHY 268
|
||||
+#define HCLK_HDCP_KEY 269
|
||||
+#define ACLK_HDCP 270
|
||||
+#define HCLK_HDCP 271
|
||||
+#define PCLK_HDCP 272
|
||||
+#define HCLK_CVBS 273
|
||||
+#define DCLK_CVBS 274
|
||||
+#define DCLK_4X_CVBS 275
|
||||
+#define ACLK_JPEG_DECODER 276
|
||||
+#define HCLK_JPEG_DECODER 277
|
||||
+#define ACLK_VO_L_ROOT 278
|
||||
+#define ACLK_VO_L_BIU 279
|
||||
+#define ACLK_MAC_VO 280
|
||||
+#define PCLK_MAC_VO 281
|
||||
+#define CLK_GMAC0_SRC 282
|
||||
+#define CLK_GMAC0_RMII_50M 283
|
||||
+#define CLK_GMAC0_TX 284
|
||||
+#define CLK_GMAC0_RX 285
|
||||
+#define ACLK_JPEG_ROOT 286
|
||||
+#define ACLK_JPEG_BIU 287
|
||||
+#define HCLK_SAI_I2S3 288
|
||||
+#define MCLK_SAI_I2S3 289
|
||||
+#define CLK_MACPHY 290
|
||||
+#define PCLK_VCDCPHY 291
|
||||
+#define PCLK_GPIO2 292
|
||||
+#define DBCLK_GPIO2 293
|
||||
+#define PCLK_VO_IOC 294
|
||||
+#define CCLK_SRC_SDMMC0 295
|
||||
+#define HCLK_SDMMC0 296
|
||||
+#define PCLK_OTPC_NS 297
|
||||
+#define CLK_SBPI_OTPC_NS 298
|
||||
+#define CLK_USER_OTPC_NS 299
|
||||
+#define CLK_HDMIHDP0 300
|
||||
+#define HCLK_USBHOST 301
|
||||
+#define HCLK_USBHOST_ARB 302
|
||||
+#define CLK_USBHOST_OHCI 303
|
||||
+#define CLK_USBHOST_UTMI 304
|
||||
+#define PCLK_UART4 305
|
||||
+#define PCLK_I2C4 306
|
||||
+#define CLK_I2C4 307
|
||||
+#define PCLK_I2C7 308
|
||||
+#define CLK_I2C7 309
|
||||
+#define PCLK_USBPHY 310
|
||||
+#define CLK_REF_USBPHY 311
|
||||
+#define HCLK_RKVDEC_ROOT 312
|
||||
+#define ACLK_RKVDEC_ROOT_NDFT 313
|
||||
+#define PCLK_DDRPHY_CRU 314
|
||||
+#define HCLK_RKVDEC_BIU 315
|
||||
+#define ACLK_RKVDEC_BIU 316
|
||||
+#define ACLK_RKVDEC 317
|
||||
+#define HCLK_RKVDEC 318
|
||||
+#define CLK_HEVC_CA_RKVDEC 319
|
||||
+#define ACLK_RKVDEC_PVTMUX_ROOT 320
|
||||
+#define CLK_RKVDEC_PVTPLL_SRC 321
|
||||
+#define PCLK_DDR_ROOT 322
|
||||
+#define PCLK_DDR_BIU 323
|
||||
+#define PCLK_DDRC 324
|
||||
+#define PCLK_DDRMON 325
|
||||
+#define CLK_TIMER_DDRMON 326
|
||||
+#define PCLK_MSCH_BIU 327
|
||||
+#define PCLK_DDR_GRF 328
|
||||
+#define PCLK_DDR_HWLP 329
|
||||
+#define PCLK_DDRPHY 330
|
||||
+#define CLK_MSCH_BIU 331
|
||||
+#define ACLK_DDR_UPCTL 332
|
||||
+#define CLK_DDR_UPCTL 333
|
||||
+#define CLK_DDRMON 334
|
||||
+#define ACLK_DDR_SCRAMBLE 335
|
||||
+#define ACLK_SPLIT 336
|
||||
+#define CLK_DDRC_SRC 337
|
||||
+#define CLK_DDR_PHY 338
|
||||
+#define PCLK_OTPC_S 339
|
||||
+#define CLK_SBPI_OTPC_S 340
|
||||
+#define CLK_USER_OTPC_S 341
|
||||
+#define PCLK_KEYREADER 342
|
||||
+#define PCLK_BUS_SGRF 343
|
||||
+#define PCLK_STIMER 344
|
||||
+#define CLK_STIMER0 345
|
||||
+#define CLK_STIMER1 346
|
||||
+#define PCLK_WDT_S 347
|
||||
+#define TCLK_WDT_S 348
|
||||
+#define HCLK_TRNG_S 349
|
||||
+#define HCLK_BOOTROM 350
|
||||
+#define PCLK_DCF 351
|
||||
+#define ACLK_SYSMEM 352
|
||||
+#define HCLK_TSP 353
|
||||
+#define ACLK_TSP 354
|
||||
+#define CLK_CORE_TSP 355
|
||||
+#define CLK_OTPC_ARB 356
|
||||
+#define PCLK_OTP_MASK 357
|
||||
+#define CLK_PMC_OTP 358
|
||||
+#define PCLK_PMU_ROOT 359
|
||||
+#define HCLK_PMU_ROOT 360
|
||||
+#define PCLK_I2C2 361
|
||||
+#define CLK_I2C2 362
|
||||
+#define HCLK_PMU_BIU 363
|
||||
+#define PCLK_PMU_BIU 364
|
||||
+#define FCLK_MCU 365
|
||||
+#define RTC_CLK_MCU 366
|
||||
+#define PCLK_OSCCHK 367
|
||||
+#define CLK_PMU_MCU_JTAG 368
|
||||
+#define PCLK_PMU 369
|
||||
+#define PCLK_GPIO0 370
|
||||
+#define DBCLK_GPIO0 371
|
||||
+#define XIN_OSC0_DIV 372
|
||||
+#define CLK_DEEPSLOW 373
|
||||
+#define CLK_DDR_FAIL_SAFE 374
|
||||
+#define PCLK_PMU_HP_TIMER 375
|
||||
+#define CLK_PMU_HP_TIMER 376
|
||||
+#define CLK_PMU_32K_HP_TIMER 377
|
||||
+#define PCLK_PMU_IOC 378
|
||||
+#define PCLK_PMU_CRU 379
|
||||
+#define PCLK_PMU_GRF 380
|
||||
+#define PCLK_PMU_WDT 381
|
||||
+#define TCLK_PMU_WDT 382
|
||||
+#define PCLK_PMU_MAILBOX 383
|
||||
+#define PCLK_SCRKEYGEN 384
|
||||
+#define CLK_SCRKEYGEN 385
|
||||
+#define CLK_PVTM_OSCCHK 386
|
||||
+#define CLK_REFOUT 387
|
||||
+#define CLK_PVTM_PMU 388
|
||||
+#define PCLK_PVTM_PMU 389
|
||||
+#define PCLK_PMU_SGRF 390
|
||||
+#define HCLK_PMU_SRAM 391
|
||||
+#define CLK_UART0 392
|
||||
+#define CLK_UART1 393
|
||||
+#define CLK_UART2 394
|
||||
+#define CLK_UART3 395
|
||||
+#define CLK_UART4 396
|
||||
+#define CLK_UART5 397
|
||||
+#define CLK_UART6 398
|
||||
+#define CLK_UART7 399
|
||||
+#define MCLK_I2S0_2CH_SAI_SRC_PRE 400
|
||||
+#define MCLK_I2S1_8CH_SAI_SRC_PRE 401
|
||||
+#define MCLK_I2S2_2CH_SAI_SRC_PRE 402
|
||||
+#define MCLK_I2S3_8CH_SAI_SRC_PRE 403
|
||||
+#define MCLK_SDPDIF_SRC_PRE 404
|
||||
+
|
||||
+/* scmi-clocks indices */
|
||||
+#define SCMI_PCLK_KEYREADER 0
|
||||
+#define SCMI_HCLK_KLAD 1
|
||||
+#define SCMI_PCLK_KLAD 2
|
||||
+#define SCMI_HCLK_TRNG_S 3
|
||||
+#define SCMI_HCLK_CRYPTO_S 4
|
||||
+#define SCMI_PCLK_WDT_S 5
|
||||
+#define SCMI_TCLK_WDT_S 6
|
||||
+#define SCMI_PCLK_STIMER 7
|
||||
+#define SCMI_CLK_STIMER0 8
|
||||
+#define SCMI_CLK_STIMER1 9
|
||||
+#define SCMI_PCLK_OTP_MASK 10
|
||||
+#define SCMI_PCLK_OTPC_S 11
|
||||
+#define SCMI_CLK_SBPI_OTPC_S 12
|
||||
+#define SCMI_CLK_USER_OTPC_S 13
|
||||
+#define SCMI_CLK_PMC_OTP 14
|
||||
+#define SCMI_CLK_OTPC_ARB 15
|
||||
+#define SCMI_CLK_CORE_TSP 16
|
||||
+#define SCMI_ACLK_TSP 17
|
||||
+#define SCMI_HCLK_TSP 18
|
||||
+#define SCMI_PCLK_DCF 19
|
||||
+#define SCMI_CLK_DDR 20
|
||||
+#define SCMI_CLK_CPU 21
|
||||
+#define SCMI_CLK_GPU 22
|
||||
+#define SCMI_CORE_CRYPTO 23
|
||||
+#define SCMI_ACLK_CRYPTO 24
|
||||
+#define SCMI_PKA_CRYPTO 25
|
||||
+#define SCMI_HCLK_CRYPTO 26
|
||||
+#define SCMI_CORE_CRYPTO_S 27
|
||||
+#define SCMI_ACLK_CRYPTO_S 28
|
||||
+#define SCMI_PKA_CRYPTO_S 29
|
||||
+#define SCMI_CORE_KLAD 30
|
||||
+#define SCMI_ACLK_KLAD 31
|
||||
+#define SCMI_HCLK_TRNG 32
|
||||
+
|
||||
+#endif // _DT_BINDINGS_CLK_ROCKCHIP_RK3528_H
|
||||
--- /dev/null
|
||||
+++ b/include/dt-bindings/reset/rockchip,rk3528-cru.h
|
||||
@@ -0,0 +1,241 @@
|
||||
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
|
||||
+/*
|
||||
+ * Copyright (c) 2022 Rockchip Electronics Co. Ltd.
|
||||
+ * Copyright (c) 2024 Yao Zi <ziyao@disroot.org>
|
||||
+ * Author: Joseph Chen <chenjh@rock-chips.com>
|
||||
+ */
|
||||
+
|
||||
+#ifndef _DT_BINDINGS_RESET_ROCKCHIP_RK3528_H
|
||||
+#define _DT_BINDINGS_RESET_ROCKCHIP_RK3528_H
|
||||
+
|
||||
+#define SRST_CORE0_PO 0
|
||||
+#define SRST_CORE1_PO 1
|
||||
+#define SRST_CORE2_PO 2
|
||||
+#define SRST_CORE3_PO 3
|
||||
+#define SRST_CORE0 4
|
||||
+#define SRST_CORE1 5
|
||||
+#define SRST_CORE2 6
|
||||
+#define SRST_CORE3 7
|
||||
+#define SRST_NL2 8
|
||||
+#define SRST_CORE_BIU 9
|
||||
+#define SRST_CORE_CRYPTO 10
|
||||
+#define SRST_P_DBG 11
|
||||
+#define SRST_POT_DBG 12
|
||||
+#define SRST_NT_DBG 13
|
||||
+#define SRST_P_CORE_GRF 14
|
||||
+#define SRST_P_DAPLITE_BIU 15
|
||||
+#define SRST_P_CPU_BIU 16
|
||||
+#define SRST_REF_PVTPLL_CORE 17
|
||||
+#define SRST_A_BUS_VOPGL_BIU 18
|
||||
+#define SRST_A_BUS_H_BIU 19
|
||||
+#define SRST_A_SYSMEM_BIU 20
|
||||
+#define SRST_A_BUS_BIU 21
|
||||
+#define SRST_H_BUS_BIU 22
|
||||
+#define SRST_P_BUS_BIU 23
|
||||
+#define SRST_P_DFT2APB 24
|
||||
+#define SRST_P_BUS_GRF 25
|
||||
+#define SRST_A_BUS_M_BIU 26
|
||||
+#define SRST_A_GIC 27
|
||||
+#define SRST_A_SPINLOCK 28
|
||||
+#define SRST_A_DMAC 29
|
||||
+#define SRST_P_TIMER 30
|
||||
+#define SRST_TIMER0 31
|
||||
+#define SRST_TIMER1 32
|
||||
+#define SRST_TIMER2 33
|
||||
+#define SRST_TIMER3 34
|
||||
+#define SRST_TIMER4 35
|
||||
+#define SRST_TIMER5 36
|
||||
+#define SRST_P_JDBCK_DAP 37
|
||||
+#define SRST_JDBCK_DAP 38
|
||||
+#define SRST_P_WDT_NS 39
|
||||
+#define SRST_T_WDT_NS 40
|
||||
+#define SRST_H_TRNG_NS 41
|
||||
+#define SRST_P_UART0 42
|
||||
+#define SRST_S_UART0 43
|
||||
+#define SRST_PKA_CRYPTO 44
|
||||
+#define SRST_A_CRYPTO 45
|
||||
+#define SRST_H_CRYPTO 46
|
||||
+#define SRST_P_DMA2DDR 47
|
||||
+#define SRST_A_DMA2DDR 48
|
||||
+#define SRST_P_PWM0 49
|
||||
+#define SRST_PWM0 50
|
||||
+#define SRST_P_PWM1 51
|
||||
+#define SRST_PWM1 52
|
||||
+#define SRST_P_SCR 53
|
||||
+#define SRST_A_DCF 54
|
||||
+#define SRST_P_INTMUX 55
|
||||
+#define SRST_A_VPU_BIU 56
|
||||
+#define SRST_H_VPU_BIU 57
|
||||
+#define SRST_P_VPU_BIU 58
|
||||
+#define SRST_A_VPU 59
|
||||
+#define SRST_H_VPU 60
|
||||
+#define SRST_P_CRU_PCIE 61
|
||||
+#define SRST_P_VPU_GRF 62
|
||||
+#define SRST_H_SFC 63
|
||||
+#define SRST_S_SFC 64
|
||||
+#define SRST_C_EMMC 65
|
||||
+#define SRST_H_EMMC 66
|
||||
+#define SRST_A_EMMC 67
|
||||
+#define SRST_B_EMMC 68
|
||||
+#define SRST_T_EMMC 69
|
||||
+#define SRST_P_GPIO1 70
|
||||
+#define SRST_DB_GPIO1 71
|
||||
+#define SRST_A_VPU_L_BIU 72
|
||||
+#define SRST_P_VPU_IOC 73
|
||||
+#define SRST_H_SAI_I2S0 74
|
||||
+#define SRST_M_SAI_I2S0 75
|
||||
+#define SRST_H_SAI_I2S2 76
|
||||
+#define SRST_M_SAI_I2S2 77
|
||||
+#define SRST_P_ACODEC 78
|
||||
+#define SRST_P_GPIO3 79
|
||||
+#define SRST_DB_GPIO3 80
|
||||
+#define SRST_P_SPI1 81
|
||||
+#define SRST_SPI1 82
|
||||
+#define SRST_P_UART2 83
|
||||
+#define SRST_S_UART2 84
|
||||
+#define SRST_P_UART5 85
|
||||
+#define SRST_S_UART5 86
|
||||
+#define SRST_P_UART6 87
|
||||
+#define SRST_S_UART6 88
|
||||
+#define SRST_P_UART7 89
|
||||
+#define SRST_S_UART7 90
|
||||
+#define SRST_P_I2C3 91
|
||||
+#define SRST_I2C3 92
|
||||
+#define SRST_P_I2C5 93
|
||||
+#define SRST_I2C5 94
|
||||
+#define SRST_P_I2C6 95
|
||||
+#define SRST_I2C6 96
|
||||
+#define SRST_A_MAC 97
|
||||
+#define SRST_P_PCIE 98
|
||||
+#define SRST_PCIE_PIPE_PHY 99
|
||||
+#define SRST_PCIE_POWER_UP 100
|
||||
+#define SRST_P_PCIE_PHY 101
|
||||
+#define SRST_P_PIPE_GRF 102
|
||||
+#define SRST_H_SDIO0 103
|
||||
+#define SRST_H_SDIO1 104
|
||||
+#define SRST_TS_0 105
|
||||
+#define SRST_TS_1 106
|
||||
+#define SRST_P_CAN2 107
|
||||
+#define SRST_CAN2 108
|
||||
+#define SRST_P_CAN3 109
|
||||
+#define SRST_CAN3 110
|
||||
+#define SRST_P_SARADC 111
|
||||
+#define SRST_SARADC 112
|
||||
+#define SRST_SARADC_PHY 113
|
||||
+#define SRST_P_TSADC 114
|
||||
+#define SRST_TSADC 115
|
||||
+#define SRST_A_USB3OTG 116
|
||||
+#define SRST_A_GPU_BIU 117
|
||||
+#define SRST_P_GPU_BIU 118
|
||||
+#define SRST_A_GPU 119
|
||||
+#define SRST_REF_PVTPLL_GPU 120
|
||||
+#define SRST_H_RKVENC_BIU 121
|
||||
+#define SRST_A_RKVENC_BIU 122
|
||||
+#define SRST_P_RKVENC_BIU 123
|
||||
+#define SRST_H_RKVENC 124
|
||||
+#define SRST_A_RKVENC 125
|
||||
+#define SRST_CORE_RKVENC 126
|
||||
+#define SRST_H_SAI_I2S1 127
|
||||
+#define SRST_M_SAI_I2S1 128
|
||||
+#define SRST_P_I2C1 129
|
||||
+#define SRST_I2C1 130
|
||||
+#define SRST_P_I2C0 131
|
||||
+#define SRST_I2C0 132
|
||||
+#define SRST_P_SPI0 133
|
||||
+#define SRST_SPI0 134
|
||||
+#define SRST_P_GPIO4 135
|
||||
+#define SRST_DB_GPIO4 136
|
||||
+#define SRST_P_RKVENC_IOC 137
|
||||
+#define SRST_H_SPDIF 138
|
||||
+#define SRST_M_SPDIF 139
|
||||
+#define SRST_H_PDM 140
|
||||
+#define SRST_M_PDM 141
|
||||
+#define SRST_P_UART1 142
|
||||
+#define SRST_S_UART1 143
|
||||
+#define SRST_P_UART3 144
|
||||
+#define SRST_S_UART3 145
|
||||
+#define SRST_P_RKVENC_GRF 146
|
||||
+#define SRST_P_CAN0 147
|
||||
+#define SRST_CAN0 148
|
||||
+#define SRST_P_CAN1 149
|
||||
+#define SRST_CAN1 150
|
||||
+#define SRST_A_VO_BIU 151
|
||||
+#define SRST_H_VO_BIU 152
|
||||
+#define SRST_P_VO_BIU 153
|
||||
+#define SRST_H_RGA2E 154
|
||||
+#define SRST_A_RGA2E 155
|
||||
+#define SRST_CORE_RGA2E 156
|
||||
+#define SRST_H_VDPP 157
|
||||
+#define SRST_A_VDPP 158
|
||||
+#define SRST_CORE_VDPP 159
|
||||
+#define SRST_P_VO_GRF 160
|
||||
+#define SRST_P_CRU 161
|
||||
+#define SRST_A_VOP_BIU 162
|
||||
+#define SRST_H_VOP 163
|
||||
+#define SRST_D_VOP0 164
|
||||
+#define SRST_D_VOP1 165
|
||||
+#define SRST_A_VOP 166
|
||||
+#define SRST_P_HDMI 167
|
||||
+#define SRST_HDMI 168
|
||||
+#define SRST_P_HDMIPHY 169
|
||||
+#define SRST_H_HDCP_KEY 170
|
||||
+#define SRST_A_HDCP 171
|
||||
+#define SRST_H_HDCP 172
|
||||
+#define SRST_P_HDCP 173
|
||||
+#define SRST_H_CVBS 174
|
||||
+#define SRST_D_CVBS_VOP 175
|
||||
+#define SRST_D_4X_CVBS_VOP 176
|
||||
+#define SRST_A_JPEG_DECODER 177
|
||||
+#define SRST_H_JPEG_DECODER 178
|
||||
+#define SRST_A_VO_L_BIU 179
|
||||
+#define SRST_A_MAC_VO 180
|
||||
+#define SRST_A_JPEG_BIU 181
|
||||
+#define SRST_H_SAI_I2S3 182
|
||||
+#define SRST_M_SAI_I2S3 183
|
||||
+#define SRST_MACPHY 184
|
||||
+#define SRST_P_VCDCPHY 185
|
||||
+#define SRST_P_GPIO2 186
|
||||
+#define SRST_DB_GPIO2 187
|
||||
+#define SRST_P_VO_IOC 188
|
||||
+#define SRST_H_SDMMC0 189
|
||||
+#define SRST_P_OTPC_NS 190
|
||||
+#define SRST_SBPI_OTPC_NS 191
|
||||
+#define SRST_USER_OTPC_NS 192
|
||||
+#define SRST_HDMIHDP0 193
|
||||
+#define SRST_H_USBHOST 194
|
||||
+#define SRST_H_USBHOST_ARB 195
|
||||
+#define SRST_HOST_UTMI 196
|
||||
+#define SRST_P_UART4 197
|
||||
+#define SRST_S_UART4 198
|
||||
+#define SRST_P_I2C4 199
|
||||
+#define SRST_I2C4 200
|
||||
+#define SRST_P_I2C7 201
|
||||
+#define SRST_I2C7 202
|
||||
+#define SRST_P_USBPHY 203
|
||||
+#define SRST_USBPHY_POR 204
|
||||
+#define SRST_USBPHY_OTG 205
|
||||
+#define SRST_USBPHY_HOST 206
|
||||
+#define SRST_P_DDRPHY_CRU 207
|
||||
+#define SRST_H_RKVDEC_BIU 208
|
||||
+#define SRST_A_RKVDEC_BIU 209
|
||||
+#define SRST_A_RKVDEC 210
|
||||
+#define SRST_H_RKVDEC 211
|
||||
+#define SRST_HEVC_CA_RKVDEC 212
|
||||
+#define SRST_REF_PVTPLL_RKVDEC 213
|
||||
+#define SRST_P_DDR_BIU 214
|
||||
+#define SRST_P_DDRC 215
|
||||
+#define SRST_P_DDRMON 216
|
||||
+#define SRST_TIMER_DDRMON 217
|
||||
+#define SRST_P_MSCH_BIU 218
|
||||
+#define SRST_P_DDR_GRF 219
|
||||
+#define SRST_P_DDR_HWLP 220
|
||||
+#define SRST_P_DDRPHY 221
|
||||
+#define SRST_MSCH_BIU 222
|
||||
+#define SRST_A_DDR_UPCTL 223
|
||||
+#define SRST_DDR_UPCTL 224
|
||||
+#define SRST_DDRMON 225
|
||||
+#define SRST_A_DDR_SCRAMBLE 226
|
||||
+#define SRST_A_SPLIT 227
|
||||
+#define SRST_DDR_PHY 228
|
||||
+
|
||||
+#endif // _DT_BINDINGS_RESET_ROCKCHIP_RK3528_H
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
From 651aabc9fb0f354ad2ba5fd06a6011e652447489 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Mon, 17 Feb 2025 06:11:43 +0000
|
||||
Subject: [PATCH] clk: rockchip: Add PLL flag ROCKCHIP_PLL_FIXED_MODE
|
||||
|
||||
RK3528 comes with a new PLL variant: its "PPLL", which mainly generates
|
||||
clocks for the PCIe controller, operates in normal mode only. Let's
|
||||
describe it with flag ROCKCHIP_PLL_FIXED_MODE and handle it in code.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Link: https://lore.kernel.org/r/20250217061142.38480-7-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-pll.c | 10 ++++++----
|
||||
drivers/clk/rockchip/clk.h | 2 ++
|
||||
2 files changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-pll.c
|
||||
+++ b/drivers/clk/rockchip/clk-pll.c
|
||||
@@ -204,10 +204,12 @@ static int rockchip_rk3036_pll_set_param
|
||||
rockchip_rk3036_pll_get_params(pll, &cur);
|
||||
cur.rate = 0;
|
||||
|
||||
- cur_parent = pll_mux_ops->get_parent(&pll_mux->hw);
|
||||
- if (cur_parent == PLL_MODE_NORM) {
|
||||
- pll_mux_ops->set_parent(&pll_mux->hw, PLL_MODE_SLOW);
|
||||
- rate_change_remuxed = 1;
|
||||
+ if (!(pll->flags & ROCKCHIP_PLL_FIXED_MODE)) {
|
||||
+ cur_parent = pll_mux_ops->get_parent(&pll_mux->hw);
|
||||
+ if (cur_parent == PLL_MODE_NORM) {
|
||||
+ pll_mux_ops->set_parent(&pll_mux->hw, PLL_MODE_SLOW);
|
||||
+ rate_change_remuxed = 1;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* update pll values */
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -469,6 +469,7 @@ struct rockchip_pll_rate_table {
|
||||
* Flags:
|
||||
* ROCKCHIP_PLL_SYNC_RATE - check rate parameters to match against the
|
||||
* rate_table parameters and ajust them if necessary.
|
||||
+ * ROCKCHIP_PLL_FIXED_MODE - the pll operates in normal mode only
|
||||
*/
|
||||
struct rockchip_pll_clock {
|
||||
unsigned int id;
|
||||
@@ -486,6 +487,7 @@ struct rockchip_pll_clock {
|
||||
};
|
||||
|
||||
#define ROCKCHIP_PLL_SYNC_RATE BIT(0)
|
||||
+#define ROCKCHIP_PLL_FIXED_MODE BIT(1)
|
||||
|
||||
#define PLL(_type, _id, _name, _pnames, _flags, _con, _mode, _mshift, \
|
||||
_lshift, _pflags, _rtable) \
|
||||
+1193
File diff suppressed because it is too large
Load Diff
+364
@@ -0,0 +1,364 @@
|
||||
From 5738362a5ee7e3417312e7fc03bcb0ffb12ba4f3 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Thu, 27 Feb 2025 17:52:57 +0000
|
||||
Subject: [PATCH] clk: rockchip: rk3528: Add reset lookup table
|
||||
|
||||
In the commit 5d0eb375e685 ("clk: rockchip: Add clock controller driver
|
||||
for RK3528 SoC") only the dt-binding header was added for the reset
|
||||
controller for the RK3528 SoC.
|
||||
|
||||
Add a reset lookup table generated from the SRST symbols used by vendor
|
||||
linux-6.1-stan-rkr5 kernel to complete support for the reset controller.
|
||||
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Link: https://lore.kernel.org/r/20250227175302.2950788-1-jonas@kwiboo.se
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/Makefile | 2 +-
|
||||
drivers/clk/rockchip/clk-rk3528.c | 2 +
|
||||
drivers/clk/rockchip/clk.h | 1 +
|
||||
drivers/clk/rockchip/rst-rk3528.c | 306 ++++++++++++++++++++++++++++++
|
||||
4 files changed, 310 insertions(+), 1 deletion(-)
|
||||
create mode 100644 drivers/clk/rockchip/rst-rk3528.c
|
||||
|
||||
--- a/drivers/clk/rockchip/Makefile
|
||||
+++ b/drivers/clk/rockchip/Makefile
|
||||
@@ -29,7 +29,7 @@ obj-$(CONFIG_CLK_RK3308) += clk-r
|
||||
obj-$(CONFIG_CLK_RK3328) += clk-rk3328.o
|
||||
obj-$(CONFIG_CLK_RK3368) += clk-rk3368.o
|
||||
obj-$(CONFIG_CLK_RK3399) += clk-rk3399.o
|
||||
-obj-$(CONFIG_CLK_RK3528) += clk-rk3528.o
|
||||
+obj-$(CONFIG_CLK_RK3528) += clk-rk3528.o rst-rk3528.o
|
||||
obj-$(CONFIG_CLK_RK3568) += clk-rk3568.o
|
||||
obj-$(CONFIG_CLK_RK3576) += clk-rk3576.o rst-rk3576.o
|
||||
obj-$(CONFIG_CLK_RK3588) += clk-rk3588.o rst-rk3588.o
|
||||
--- a/drivers/clk/rockchip/clk-rk3528.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3528.c
|
||||
@@ -1092,6 +1092,8 @@ static int __init clk_rk3528_probe(struc
|
||||
ARRAY_SIZE(rk3528_cpuclk_rates));
|
||||
rockchip_clk_register_branches(ctx, rk3528_clk_branches, nr_branches);
|
||||
|
||||
+ rk3528_rst_init(np, reg_base);
|
||||
+
|
||||
rockchip_register_restart_notifier(ctx, RK3528_GLB_SRST_FST, NULL);
|
||||
|
||||
rockchip_clk_of_add_provider(np, ctx);
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -1187,6 +1187,7 @@ static inline void rockchip_register_sof
|
||||
return rockchip_register_softrst_lut(np, NULL, num_regs, base, flags);
|
||||
}
|
||||
|
||||
+void rk3528_rst_init(struct device_node *np, void __iomem *reg_base);
|
||||
void rk3576_rst_init(struct device_node *np, void __iomem *reg_base);
|
||||
void rk3588_rst_init(struct device_node *np, void __iomem *reg_base);
|
||||
|
||||
--- /dev/null
|
||||
+++ b/drivers/clk/rockchip/rst-rk3528.c
|
||||
@@ -0,0 +1,306 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+/*
|
||||
+ * Copyright (c) 2022 Rockchip Electronics Co., Ltd.
|
||||
+ * Based on Sebastian Reichel's implementation for RK3588
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/of.h>
|
||||
+#include <dt-bindings/reset/rockchip,rk3528-cru.h>
|
||||
+#include "clk.h"
|
||||
+
|
||||
+/* 0xFF4A0000 + 0x0A00 */
|
||||
+#define RK3528_CRU_RESET_OFFSET(id, reg, bit) [id] = (0 + reg * 16 + bit)
|
||||
+
|
||||
+/* mapping table for reset ID to register offset */
|
||||
+static const int rk3528_register_offset[] = {
|
||||
+ /* CRU_SOFTRST_CON03 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE0_PO, 3, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE1_PO, 3, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE2_PO, 3, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE3_PO, 3, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE0, 3, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE1, 3, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE2, 3, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE3, 3, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_NL2, 3, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE_BIU, 3, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE_CRYPTO, 3, 10),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON05 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DBG, 5, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_POT_DBG, 5, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_NT_DBG, 5, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON06 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CORE_GRF, 6, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DAPLITE_BIU, 6, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CPU_BIU, 6, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_REF_PVTPLL_CORE, 6, 7),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON08 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_BUS_VOPGL_BIU, 8, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_BUS_H_BIU, 8, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_SYSMEM_BIU, 8, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_BUS_BIU, 8, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_BUS_BIU, 8, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_BUS_BIU, 8, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DFT2APB, 8, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_BUS_GRF, 8, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON09 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_BUS_M_BIU, 9, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_GIC, 9, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_SPINLOCK, 9, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_DMAC, 9, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_TIMER, 9, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER0, 9, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER1, 9, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER2, 9, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER3, 9, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER4, 9, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER5, 9, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_JDBCK_DAP, 9, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_JDBCK_DAP, 9, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_WDT_NS, 9, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON10 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_T_WDT_NS, 10, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_TRNG_NS, 10, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART0, 10, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART0, 10, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_PKA_CRYPTO, 10, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_CRYPTO, 10, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_CRYPTO, 10, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DMA2DDR, 10, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_DMA2DDR, 10, 14),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON11 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_PWM0, 11, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_PWM0, 11, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_PWM1, 11, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_PWM1, 11, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_SCR, 11, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_DCF, 11, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_INTMUX, 11, 12),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON25 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VPU_BIU, 25, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_VPU_BIU, 25, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VPU_BIU, 25, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VPU, 25, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_VPU, 25, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CRU_PCIE, 25, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VPU_GRF, 25, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SFC, 25, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_SFC, 25, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_C_EMMC, 25, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON26 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_EMMC, 26, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_EMMC, 26, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_B_EMMC, 26, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_T_EMMC, 26, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_GPIO1, 26, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO1, 26, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VPU_L_BIU, 26, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VPU_IOC, 26, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S0, 26, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S0, 26, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S2, 26, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S2, 26, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_ACODEC, 26, 13),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON27 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_GPIO3, 27, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO3, 27, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_SPI1, 27, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_SPI1, 27, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART2, 27, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART2, 27, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART5, 27, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART5, 27, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART6, 27, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART6, 27, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART7, 27, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART7, 27, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C3, 27, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON28 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C3, 28, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C5, 28, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C5, 28, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C6, 28, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C6, 28, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_MAC, 28, 5),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON30 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_PCIE, 30, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_PCIE_PIPE_PHY, 30, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_PCIE_POWER_UP, 30, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_PCIE_PHY, 30, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_PIPE_GRF, 30, 7),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON32 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SDIO0, 32, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SDIO1, 32, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TS_0, 32, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TS_1, 32, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CAN2, 32, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CAN2, 32, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CAN3, 32, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CAN3, 32, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_SARADC, 32, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_SARADC, 32, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_SARADC_PHY, 32, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_TSADC, 32, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TSADC, 32, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON33 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_USB3OTG, 33, 1),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON34 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_GPU_BIU, 34, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_GPU_BIU, 34, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_GPU, 34, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_REF_PVTPLL_GPU, 34, 9),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON36 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_RKVENC_BIU, 36, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_RKVENC_BIU, 36, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_RKVENC_BIU, 36, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_RKVENC, 36, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_RKVENC, 36, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE_RKVENC, 36, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S1, 36, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S1, 36, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C1, 36, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C1, 36, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C0, 36, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C0, 36, 14),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON37 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_SPI0, 37, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_SPI0, 37, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_GPIO4, 37, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO4, 37, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_RKVENC_IOC, 37, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SPDIF, 37, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_SPDIF, 37, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON38 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_PDM, 38, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_PDM, 38, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART1, 38, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART1, 38, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART3, 38, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART3, 38, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_RKVENC_GRF, 38, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CAN0, 38, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CAN0, 38, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CAN1, 38, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CAN1, 38, 10),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON39 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VO_BIU, 39, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_VO_BIU, 39, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VO_BIU, 39, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_RGA2E, 39, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_RGA2E, 39, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE_RGA2E, 39, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_VDPP, 39, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VDPP, 39, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_CORE_VDPP, 39, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VO_GRF, 39, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_CRU, 39, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON40 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VOP_BIU, 40, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_VOP, 40, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_D_VOP0, 40, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_D_VOP1, 40, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VOP, 40, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_HDMI, 40, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_HDMI, 40, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_HDMIPHY, 40, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_HDCP_KEY, 40, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON41 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_HDCP, 41, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_HDCP, 41, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_HDCP, 41, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_CVBS, 41, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_D_CVBS_VOP, 41, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_D_4X_CVBS_VOP, 41, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_JPEG_DECODER, 41, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_JPEG_DECODER, 41, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_VO_L_BIU, 41, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_MAC_VO, 41, 10),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON42 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_JPEG_BIU, 42, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S3, 42, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S3, 42, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_MACPHY, 42, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VCDCPHY, 42, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_GPIO2, 42, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO2, 42, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_VO_IOC, 42, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_SDMMC0, 42, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_OTPC_NS, 42, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_SBPI_OTPC_NS, 42, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_USER_OTPC_NS, 42, 13),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON43 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_HDMIHDP0, 43, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_USBHOST, 43, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_USBHOST_ARB, 43, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_HOST_UTMI, 43, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_UART4, 43, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_S_UART4, 43, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C4, 43, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C4, 43, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_I2C7, 43, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_I2C7, 43, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_USBPHY, 43, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_USBPHY_POR, 43, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_USBPHY_OTG, 43, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON44 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_USBPHY_HOST, 44, 0),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDRPHY_CRU, 44, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_RKVDEC_BIU, 44, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_RKVDEC_BIU, 44, 7),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_RKVDEC, 44, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_H_RKVDEC, 44, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_HEVC_CA_RKVDEC, 44, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_REF_PVTPLL_RKVDEC, 44, 12),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON45 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDR_BIU, 45, 1),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDRC, 45, 2),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDRMON, 45, 3),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_TIMER_DDRMON, 45, 4),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_MSCH_BIU, 45, 5),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDR_GRF, 45, 6),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDR_HWLP, 45, 8),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_P_DDRPHY, 45, 9),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_MSCH_BIU, 45, 10),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL, 45, 11),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DDR_UPCTL, 45, 12),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DDRMON, 45, 13),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_DDR_SCRAMBLE, 45, 14),
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_A_SPLIT, 45, 15),
|
||||
+
|
||||
+ /* CRU_SOFTRST_CON46 */
|
||||
+ RK3528_CRU_RESET_OFFSET(SRST_DDR_PHY, 46, 0),
|
||||
+};
|
||||
+
|
||||
+void rk3528_rst_init(struct device_node *np, void __iomem *reg_base)
|
||||
+{
|
||||
+ rockchip_register_softrst_lut(np,
|
||||
+ rk3528_register_offset,
|
||||
+ ARRAY_SIZE(rk3528_register_offset),
|
||||
+ reg_base + RK3528_SOFTRST_CON(0),
|
||||
+ ROCKCHIP_SOFTRST_HIWORD_MASK);
|
||||
+}
|
||||
+238
@@ -0,0 +1,238 @@
|
||||
From a5e4cde647851ed67f19a5cb54a99282f32aae99 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Liu <steven.liu@rock-chips.com>
|
||||
Date: Fri, 28 Feb 2025 06:40:09 +0000
|
||||
Subject: [PATCH] pinctrl: rockchip: Add support for RK3528
|
||||
|
||||
Add gpio and pinctrl support for the 5 GPIO banks on RK3528.
|
||||
|
||||
Signed-off-by: Steven Liu <steven.liu@rock-chips.com>
|
||||
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Link: https://lore.kernel.org/20250228064024.3200000-4-jonas@kwiboo.se
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/pinctrl/pinctrl-rockchip.c | 160 ++++++++++++++++++++++++++++-
|
||||
drivers/pinctrl/pinctrl-rockchip.h | 1 +
|
||||
2 files changed, 160 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/pinctrl/pinctrl-rockchip.c
|
||||
+++ b/drivers/pinctrl/pinctrl-rockchip.c
|
||||
@@ -2003,6 +2003,115 @@ static int rk3399_calc_drv_reg_and_bit(s
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#define RK3528_DRV_BITS_PER_PIN 8
|
||||
+#define RK3528_DRV_PINS_PER_REG 2
|
||||
+#define RK3528_DRV_GPIO0_OFFSET 0x100
|
||||
+#define RK3528_DRV_GPIO1_OFFSET 0x20120
|
||||
+#define RK3528_DRV_GPIO2_OFFSET 0x30160
|
||||
+#define RK3528_DRV_GPIO3_OFFSET 0x20190
|
||||
+#define RK3528_DRV_GPIO4_OFFSET 0x101C0
|
||||
+
|
||||
+static int rk3528_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
|
||||
+ int pin_num, struct regmap **regmap,
|
||||
+ int *reg, u8 *bit)
|
||||
+{
|
||||
+ struct rockchip_pinctrl *info = bank->drvdata;
|
||||
+
|
||||
+ *regmap = info->regmap_base;
|
||||
+
|
||||
+ if (bank->bank_num == 0)
|
||||
+ *reg = RK3528_DRV_GPIO0_OFFSET;
|
||||
+ else if (bank->bank_num == 1)
|
||||
+ *reg = RK3528_DRV_GPIO1_OFFSET;
|
||||
+ else if (bank->bank_num == 2)
|
||||
+ *reg = RK3528_DRV_GPIO2_OFFSET;
|
||||
+ else if (bank->bank_num == 3)
|
||||
+ *reg = RK3528_DRV_GPIO3_OFFSET;
|
||||
+ else if (bank->bank_num == 4)
|
||||
+ *reg = RK3528_DRV_GPIO4_OFFSET;
|
||||
+ else
|
||||
+ dev_err(info->dev, "unsupported bank_num %d\n", bank->bank_num);
|
||||
+
|
||||
+ *reg += ((pin_num / RK3528_DRV_PINS_PER_REG) * 4);
|
||||
+ *bit = pin_num % RK3528_DRV_PINS_PER_REG;
|
||||
+ *bit *= RK3528_DRV_BITS_PER_PIN;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#define RK3528_PULL_BITS_PER_PIN 2
|
||||
+#define RK3528_PULL_PINS_PER_REG 8
|
||||
+#define RK3528_PULL_GPIO0_OFFSET 0x200
|
||||
+#define RK3528_PULL_GPIO1_OFFSET 0x20210
|
||||
+#define RK3528_PULL_GPIO2_OFFSET 0x30220
|
||||
+#define RK3528_PULL_GPIO3_OFFSET 0x20230
|
||||
+#define RK3528_PULL_GPIO4_OFFSET 0x10240
|
||||
+
|
||||
+static int rk3528_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
|
||||
+ int pin_num, struct regmap **regmap,
|
||||
+ int *reg, u8 *bit)
|
||||
+{
|
||||
+ struct rockchip_pinctrl *info = bank->drvdata;
|
||||
+
|
||||
+ *regmap = info->regmap_base;
|
||||
+
|
||||
+ if (bank->bank_num == 0)
|
||||
+ *reg = RK3528_PULL_GPIO0_OFFSET;
|
||||
+ else if (bank->bank_num == 1)
|
||||
+ *reg = RK3528_PULL_GPIO1_OFFSET;
|
||||
+ else if (bank->bank_num == 2)
|
||||
+ *reg = RK3528_PULL_GPIO2_OFFSET;
|
||||
+ else if (bank->bank_num == 3)
|
||||
+ *reg = RK3528_PULL_GPIO3_OFFSET;
|
||||
+ else if (bank->bank_num == 4)
|
||||
+ *reg = RK3528_PULL_GPIO4_OFFSET;
|
||||
+ else
|
||||
+ dev_err(info->dev, "unsupported bank_num %d\n", bank->bank_num);
|
||||
+
|
||||
+ *reg += ((pin_num / RK3528_PULL_PINS_PER_REG) * 4);
|
||||
+ *bit = pin_num % RK3528_PULL_PINS_PER_REG;
|
||||
+ *bit *= RK3528_PULL_BITS_PER_PIN;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#define RK3528_SMT_BITS_PER_PIN 1
|
||||
+#define RK3528_SMT_PINS_PER_REG 8
|
||||
+#define RK3528_SMT_GPIO0_OFFSET 0x400
|
||||
+#define RK3528_SMT_GPIO1_OFFSET 0x20410
|
||||
+#define RK3528_SMT_GPIO2_OFFSET 0x30420
|
||||
+#define RK3528_SMT_GPIO3_OFFSET 0x20430
|
||||
+#define RK3528_SMT_GPIO4_OFFSET 0x10440
|
||||
+
|
||||
+static int rk3528_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
|
||||
+ int pin_num,
|
||||
+ struct regmap **regmap,
|
||||
+ int *reg, u8 *bit)
|
||||
+{
|
||||
+ struct rockchip_pinctrl *info = bank->drvdata;
|
||||
+
|
||||
+ *regmap = info->regmap_base;
|
||||
+
|
||||
+ if (bank->bank_num == 0)
|
||||
+ *reg = RK3528_SMT_GPIO0_OFFSET;
|
||||
+ else if (bank->bank_num == 1)
|
||||
+ *reg = RK3528_SMT_GPIO1_OFFSET;
|
||||
+ else if (bank->bank_num == 2)
|
||||
+ *reg = RK3528_SMT_GPIO2_OFFSET;
|
||||
+ else if (bank->bank_num == 3)
|
||||
+ *reg = RK3528_SMT_GPIO3_OFFSET;
|
||||
+ else if (bank->bank_num == 4)
|
||||
+ *reg = RK3528_SMT_GPIO4_OFFSET;
|
||||
+ else
|
||||
+ dev_err(info->dev, "unsupported bank_num %d\n", bank->bank_num);
|
||||
+
|
||||
+ *reg += ((pin_num / RK3528_SMT_PINS_PER_REG) * 4);
|
||||
+ *bit = pin_num % RK3528_SMT_PINS_PER_REG;
|
||||
+ *bit *= RK3528_SMT_BITS_PER_PIN;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
#define RK3568_PULL_PMU_OFFSET 0x20
|
||||
#define RK3568_PULL_GRF_OFFSET 0x80
|
||||
#define RK3568_PULL_BITS_PER_PIN 2
|
||||
@@ -2495,7 +2604,8 @@ static int rockchip_set_drive_perpin(str
|
||||
rmask_bits = RK3588_DRV_BITS_PER_PIN;
|
||||
ret = strength;
|
||||
goto config;
|
||||
- } else if (ctrl->type == RK3568) {
|
||||
+ } else if (ctrl->type == RK3528 ||
|
||||
+ ctrl->type == RK3568) {
|
||||
rmask_bits = RK3568_DRV_BITS_PER_PIN;
|
||||
ret = (1 << (strength + 1)) - 1;
|
||||
goto config;
|
||||
@@ -2639,6 +2749,7 @@ static int rockchip_get_pull(struct rock
|
||||
case RK3328:
|
||||
case RK3368:
|
||||
case RK3399:
|
||||
+ case RK3528:
|
||||
case RK3568:
|
||||
case RK3576:
|
||||
case RK3588:
|
||||
@@ -2699,6 +2810,7 @@ static int rockchip_set_pull(struct rock
|
||||
case RK3328:
|
||||
case RK3368:
|
||||
case RK3399:
|
||||
+ case RK3528:
|
||||
case RK3568:
|
||||
case RK3576:
|
||||
case RK3588:
|
||||
@@ -2964,6 +3076,7 @@ static bool rockchip_pinconf_pull_valid(
|
||||
case RK3328:
|
||||
case RK3368:
|
||||
case RK3399:
|
||||
+ case RK3528:
|
||||
case RK3568:
|
||||
case RK3576:
|
||||
case RK3588:
|
||||
@@ -4083,6 +4196,49 @@ static struct rockchip_pin_ctrl rk3399_p
|
||||
.drv_calc_reg = rk3399_calc_drv_reg_and_bit,
|
||||
};
|
||||
|
||||
+static struct rockchip_pin_bank rk3528_pin_banks[] = {
|
||||
+ PIN_BANK_IOMUX_FLAGS_OFFSET(0, 32, "gpio0",
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ 0, 0, 0, 0),
|
||||
+ PIN_BANK_IOMUX_FLAGS_OFFSET(1, 32, "gpio1",
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ 0x20020, 0x20028, 0x20030, 0x20038),
|
||||
+ PIN_BANK_IOMUX_FLAGS_OFFSET(2, 32, "gpio2",
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ 0x30040, 0, 0, 0),
|
||||
+ PIN_BANK_IOMUX_FLAGS_OFFSET(3, 32, "gpio3",
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ 0x20060, 0x20068, 0x20070, 0),
|
||||
+ PIN_BANK_IOMUX_FLAGS_OFFSET(4, 32, "gpio4",
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ IOMUX_WIDTH_4BIT,
|
||||
+ 0x10080, 0x10088, 0x10090, 0x10098),
|
||||
+};
|
||||
+
|
||||
+static struct rockchip_pin_ctrl rk3528_pin_ctrl = {
|
||||
+ .pin_banks = rk3528_pin_banks,
|
||||
+ .nr_banks = ARRAY_SIZE(rk3528_pin_banks),
|
||||
+ .label = "RK3528-GPIO",
|
||||
+ .type = RK3528,
|
||||
+ .pull_calc_reg = rk3528_calc_pull_reg_and_bit,
|
||||
+ .drv_calc_reg = rk3528_calc_drv_reg_and_bit,
|
||||
+ .schmitt_calc_reg = rk3528_calc_schmitt_reg_and_bit,
|
||||
+};
|
||||
+
|
||||
static struct rockchip_pin_bank rk3568_pin_banks[] = {
|
||||
PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT,
|
||||
IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT,
|
||||
@@ -4207,6 +4363,8 @@ static const struct of_device_id rockchi
|
||||
.data = &rk3368_pin_ctrl },
|
||||
{ .compatible = "rockchip,rk3399-pinctrl",
|
||||
.data = &rk3399_pin_ctrl },
|
||||
+ { .compatible = "rockchip,rk3528-pinctrl",
|
||||
+ .data = &rk3528_pin_ctrl },
|
||||
{ .compatible = "rockchip,rk3568-pinctrl",
|
||||
.data = &rk3568_pin_ctrl },
|
||||
{ .compatible = "rockchip,rk3576-pinctrl",
|
||||
--- a/drivers/pinctrl/pinctrl-rockchip.h
|
||||
+++ b/drivers/pinctrl/pinctrl-rockchip.h
|
||||
@@ -196,6 +196,7 @@ enum rockchip_pinctrl_type {
|
||||
RK3328,
|
||||
RK3368,
|
||||
RK3399,
|
||||
+ RK3528,
|
||||
RK3568,
|
||||
RK3576,
|
||||
RK3588,
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
From 8a023e86f3d999007f2687952afe78ef34a6aa91 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Tue, 6 May 2025 09:22:02 +0000
|
||||
Subject: [PATCH] dt-bindings: clock: Add GRF clock definition for RK3528
|
||||
|
||||
These clocks are for SD/SDIO tuning purpose and come with registers
|
||||
in GRF syscon.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20250506092206.46143-2-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
include/dt-bindings/clock/rockchip,rk3528-cru.h | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
--- a/include/dt-bindings/clock/rockchip,rk3528-cru.h
|
||||
+++ b/include/dt-bindings/clock/rockchip,rk3528-cru.h
|
||||
@@ -414,6 +414,12 @@
|
||||
#define MCLK_I2S2_2CH_SAI_SRC_PRE 402
|
||||
#define MCLK_I2S3_8CH_SAI_SRC_PRE 403
|
||||
#define MCLK_SDPDIF_SRC_PRE 404
|
||||
+#define SCLK_SDMMC_DRV 405
|
||||
+#define SCLK_SDMMC_SAMPLE 406
|
||||
+#define SCLK_SDIO0_DRV 407
|
||||
+#define SCLK_SDIO0_SAMPLE 408
|
||||
+#define SCLK_SDIO1_DRV 409
|
||||
+#define SCLK_SDIO1_SAMPLE 410
|
||||
|
||||
/* scmi-clocks indices */
|
||||
#define SCMI_PCLK_KEYREADER 0
|
||||
+156
@@ -0,0 +1,156 @@
|
||||
From 621ba4d9f6db560a7406fd732af1b495ff5aa103 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Tue, 6 May 2025 09:22:03 +0000
|
||||
Subject: [PATCH] clk: rockchip: Support MMC clocks in GRF region
|
||||
|
||||
Registers of MMC drive/sample clocks in Rockchip RV1106 and RK3528
|
||||
locate in GRF regions. Adjust MMC clock code to support register
|
||||
operations through regmap.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Link: https://lore.kernel.org/r/20250506092206.46143-3-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-mmc-phase.c | 24 ++++++++++++++++++++----
|
||||
drivers/clk/rockchip/clk.c | 16 ++++++++++++++--
|
||||
drivers/clk/rockchip/clk.h | 17 ++++++++++++++++-
|
||||
3 files changed, 50 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-mmc-phase.c
|
||||
+++ b/drivers/clk/rockchip/clk-mmc-phase.c
|
||||
@@ -9,11 +9,14 @@
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
+#include <linux/regmap.h>
|
||||
#include "clk.h"
|
||||
|
||||
struct rockchip_mmc_clock {
|
||||
struct clk_hw hw;
|
||||
void __iomem *reg;
|
||||
+ struct regmap *grf;
|
||||
+ int grf_reg;
|
||||
int shift;
|
||||
int cached_phase;
|
||||
struct notifier_block clk_rate_change_nb;
|
||||
@@ -54,7 +57,12 @@ static int rockchip_mmc_get_phase(struct
|
||||
if (!rate)
|
||||
return 0;
|
||||
|
||||
- raw_value = readl(mmc_clock->reg) >> (mmc_clock->shift);
|
||||
+ if (mmc_clock->grf)
|
||||
+ regmap_read(mmc_clock->grf, mmc_clock->grf_reg, &raw_value);
|
||||
+ else
|
||||
+ raw_value = readl(mmc_clock->reg);
|
||||
+
|
||||
+ raw_value >>= mmc_clock->shift;
|
||||
|
||||
degrees = (raw_value & ROCKCHIP_MMC_DEGREE_MASK) * 90;
|
||||
|
||||
@@ -134,8 +142,12 @@ static int rockchip_mmc_set_phase(struct
|
||||
raw_value = delay_num ? ROCKCHIP_MMC_DELAY_SEL : 0;
|
||||
raw_value |= delay_num << ROCKCHIP_MMC_DELAYNUM_OFFSET;
|
||||
raw_value |= nineties;
|
||||
- writel(HIWORD_UPDATE(raw_value, 0x07ff, mmc_clock->shift),
|
||||
- mmc_clock->reg);
|
||||
+ raw_value = HIWORD_UPDATE(raw_value, 0x07ff, mmc_clock->shift);
|
||||
+
|
||||
+ if (mmc_clock->grf)
|
||||
+ regmap_write(mmc_clock->grf, mmc_clock->grf_reg, raw_value);
|
||||
+ else
|
||||
+ writel(raw_value, mmc_clock->reg);
|
||||
|
||||
pr_debug("%s->set_phase(%d) delay_nums=%u reg[0x%p]=0x%03x actual_degrees=%d\n",
|
||||
clk_hw_get_name(hw), degrees, delay_num,
|
||||
@@ -189,7 +201,9 @@ static int rockchip_mmc_clk_rate_notify(
|
||||
|
||||
struct clk *rockchip_clk_register_mmc(const char *name,
|
||||
const char *const *parent_names, u8 num_parents,
|
||||
- void __iomem *reg, int shift)
|
||||
+ void __iomem *reg,
|
||||
+ struct regmap *grf, int grf_reg,
|
||||
+ int shift)
|
||||
{
|
||||
struct clk_init_data init;
|
||||
struct rockchip_mmc_clock *mmc_clock;
|
||||
@@ -208,6 +222,8 @@ struct clk *rockchip_clk_register_mmc(co
|
||||
|
||||
mmc_clock->hw.init = &init;
|
||||
mmc_clock->reg = reg;
|
||||
+ mmc_clock->grf = grf;
|
||||
+ mmc_clock->grf_reg = grf_reg;
|
||||
mmc_clock->shift = shift;
|
||||
|
||||
clk = clk_register(NULL, &mmc_clock->hw);
|
||||
--- a/drivers/clk/rockchip/clk.c
|
||||
+++ b/drivers/clk/rockchip/clk.c
|
||||
@@ -509,8 +509,10 @@ void rockchip_clk_register_branches(stru
|
||||
clk = NULL;
|
||||
|
||||
/* for GRF-dependent branches, choose the right grf first */
|
||||
- if ((list->branch_type == branch_muxgrf || list->branch_type == branch_grf_gate) &&
|
||||
- list->grf_type != grf_type_sys) {
|
||||
+ if ((list->branch_type == branch_muxgrf ||
|
||||
+ list->branch_type == branch_grf_gate ||
|
||||
+ list->branch_type == branch_grf_mmc) &&
|
||||
+ list->grf_type != grf_type_sys) {
|
||||
hash_for_each_possible(ctx->aux_grf_table, agrf, node, list->grf_type) {
|
||||
if (agrf->type == list->grf_type) {
|
||||
grf = agrf->grf;
|
||||
@@ -612,6 +614,16 @@ void rockchip_clk_register_branches(stru
|
||||
list->name,
|
||||
list->parent_names, list->num_parents,
|
||||
ctx->reg_base + list->muxdiv_offset,
|
||||
+ NULL, 0,
|
||||
+ list->div_shift
|
||||
+ );
|
||||
+ break;
|
||||
+ case branch_grf_mmc:
|
||||
+ clk = rockchip_clk_register_mmc(
|
||||
+ list->name,
|
||||
+ list->parent_names, list->num_parents,
|
||||
+ 0,
|
||||
+ grf, list->muxdiv_offset,
|
||||
list->div_shift
|
||||
);
|
||||
break;
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -580,7 +580,9 @@ struct clk *rockchip_clk_register_cpuclk
|
||||
|
||||
struct clk *rockchip_clk_register_mmc(const char *name,
|
||||
const char *const *parent_names, u8 num_parents,
|
||||
- void __iomem *reg, int shift);
|
||||
+ void __iomem *reg,
|
||||
+ struct regmap *grf, int grf_reg,
|
||||
+ int shift);
|
||||
|
||||
/*
|
||||
* DDRCLK flags, including method of setting the rate
|
||||
@@ -625,6 +627,7 @@ enum rockchip_clk_branch_type {
|
||||
branch_grf_gate,
|
||||
branch_linked_gate,
|
||||
branch_mmc,
|
||||
+ branch_grf_mmc,
|
||||
branch_inverter,
|
||||
branch_factor,
|
||||
branch_ddrclk,
|
||||
@@ -991,6 +994,18 @@ struct rockchip_clk_branch {
|
||||
.div_shift = shift, \
|
||||
}
|
||||
|
||||
+#define MMC_GRF(_id, cname, pname, offset, shift, grftype) \
|
||||
+ { \
|
||||
+ .id = _id, \
|
||||
+ .branch_type = branch_grf_mmc, \
|
||||
+ .name = cname, \
|
||||
+ .parent_names = (const char *[]){ pname }, \
|
||||
+ .num_parents = 1, \
|
||||
+ .muxdiv_offset = offset, \
|
||||
+ .div_shift = shift, \
|
||||
+ .grf_type = grftype, \
|
||||
+ }
|
||||
+
|
||||
#define INVERTER(_id, cname, pname, io, is, if) \
|
||||
{ \
|
||||
.id = _id, \
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
From 61bf658a4d95e8f982b6e66dea763bff57996349 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Sat, 10 May 2025 07:52:49 +0000
|
||||
Subject: [PATCH] clk: rockchip: Pass NULL as reg pointer when registering GRF
|
||||
MMC clocks
|
||||
|
||||
This corrects the type and suppresses sparse warnings about passing
|
||||
plain integers as NULL pointer.
|
||||
|
||||
Fixes: 621ba4d9f6db ("clk: rockchip: Support MMC clocks in GRF region")
|
||||
Reported-by: kernel test robot <lkp@intel.com>
|
||||
Closes: https://lore.kernel.org/oe-kbuild-all/202505100302.YVtB1zhF-lkp@intel.com/
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Link: https://lore.kernel.org/r/20250510075248.34006-2-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk.c
|
||||
+++ b/drivers/clk/rockchip/clk.c
|
||||
@@ -622,7 +622,7 @@ void rockchip_clk_register_branches(stru
|
||||
clk = rockchip_clk_register_mmc(
|
||||
list->name,
|
||||
list->parent_names, list->num_parents,
|
||||
- 0,
|
||||
+ NULL,
|
||||
grf, list->muxdiv_offset,
|
||||
list->div_shift
|
||||
);
|
||||
+157
@@ -0,0 +1,157 @@
|
||||
From 306d2f5ddaa765f04ffb54fc9437a6318f904b53 Mon Sep 17 00:00:00 2001
|
||||
From: Yao Zi <ziyao@disroot.org>
|
||||
Date: Tue, 6 May 2025 09:22:04 +0000
|
||||
Subject: [PATCH] clk: rockchip: rk3528: Add SD/SDIO tuning clocks in GRF
|
||||
region
|
||||
|
||||
These clocks locate in VO and VPU GRF, serving for SD/SDIO controller
|
||||
tuning purpose. Add their definitions and register them in driver if
|
||||
corresponding GRF is available.
|
||||
|
||||
GRFs are looked up by compatible to simplify devicetree binding.
|
||||
|
||||
Signed-off-by: Yao Zi <ziyao@disroot.org>
|
||||
Link: https://lore.kernel.org/r/20250506092206.46143-4-ziyao@disroot.org
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
---
|
||||
drivers/clk/rockchip/clk-rk3528.c | 82 ++++++++++++++++++++++++++++---
|
||||
drivers/clk/rockchip/clk.h | 5 ++
|
||||
2 files changed, 81 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/clk/rockchip/clk-rk3528.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3528.c
|
||||
@@ -10,6 +10,8 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
+#include <linux/mfd/syscon.h>
|
||||
+#include <linux/minmax.h>
|
||||
|
||||
#include <dt-bindings/clock/rockchip,rk3528-cru.h>
|
||||
|
||||
@@ -1061,23 +1063,65 @@ static struct rockchip_clk_branch rk3528
|
||||
0, 1, 1),
|
||||
};
|
||||
|
||||
+static struct rockchip_clk_branch rk3528_vo_clk_branches[] __initdata = {
|
||||
+ MMC_GRF(SCLK_SDMMC_DRV, "sdmmc_drv", "cclk_src_sdmmc0",
|
||||
+ RK3528_SDMMC_CON(0), 1, grf_type_vo),
|
||||
+ MMC_GRF(SCLK_SDMMC_SAMPLE, "sdmmc_sample", "cclk_src_sdmmc0",
|
||||
+ RK3528_SDMMC_CON(1), 1, grf_type_vo),
|
||||
+};
|
||||
+
|
||||
+static struct rockchip_clk_branch rk3528_vpu_clk_branches[] __initdata = {
|
||||
+ MMC_GRF(SCLK_SDIO0_DRV, "sdio0_drv", "cclk_src_sdio0",
|
||||
+ RK3528_SDIO0_CON(0), 1, grf_type_vpu),
|
||||
+ MMC_GRF(SCLK_SDIO0_SAMPLE, "sdio0_sample", "cclk_src_sdio0",
|
||||
+ RK3528_SDIO0_CON(1), 1, grf_type_vpu),
|
||||
+ MMC_GRF(SCLK_SDIO1_DRV, "sdio1_drv", "cclk_src_sdio1",
|
||||
+ RK3528_SDIO1_CON(0), 1, grf_type_vpu),
|
||||
+ MMC_GRF(SCLK_SDIO1_SAMPLE, "sdio1_sample", "cclk_src_sdio1",
|
||||
+ RK3528_SDIO1_CON(1), 1, grf_type_vpu),
|
||||
+};
|
||||
+
|
||||
static int __init clk_rk3528_probe(struct platform_device *pdev)
|
||||
{
|
||||
- struct rockchip_clk_provider *ctx;
|
||||
+ unsigned long nr_vpu_branches = ARRAY_SIZE(rk3528_vpu_clk_branches);
|
||||
+ unsigned long nr_vo_branches = ARRAY_SIZE(rk3528_vo_clk_branches);
|
||||
+ unsigned long nr_branches = ARRAY_SIZE(rk3528_clk_branches);
|
||||
+ unsigned long nr_clks, nr_vo_clks, nr_vpu_clks;
|
||||
+ struct rockchip_aux_grf *vo_grf_e, *vpu_grf_e;
|
||||
+ struct regmap *vo_grf, *vpu_grf;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *np = dev->of_node;
|
||||
- unsigned long nr_branches = ARRAY_SIZE(rk3528_clk_branches);
|
||||
- unsigned long nr_clks;
|
||||
+ struct rockchip_clk_provider *ctx;
|
||||
void __iomem *reg_base;
|
||||
|
||||
- nr_clks = rockchip_clk_find_max_clk_id(rk3528_clk_branches,
|
||||
- nr_branches) + 1;
|
||||
-
|
||||
reg_base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(reg_base))
|
||||
return dev_err_probe(dev, PTR_ERR(reg_base),
|
||||
"could not map cru region");
|
||||
|
||||
+ nr_clks = rockchip_clk_find_max_clk_id(rk3528_clk_branches,
|
||||
+ nr_branches) + 1;
|
||||
+
|
||||
+ vo_grf = syscon_regmap_lookup_by_compatible("rockchip,rk3528-vo-grf");
|
||||
+ if (!IS_ERR(vo_grf)) {
|
||||
+ nr_vo_clks = rockchip_clk_find_max_clk_id(rk3528_vo_clk_branches,
|
||||
+ nr_vo_branches) + 1;
|
||||
+ nr_clks = max(nr_clks, nr_vo_clks);
|
||||
+ } else if (PTR_ERR(vo_grf) != -ENODEV) {
|
||||
+ return dev_err_probe(dev, PTR_ERR(vo_grf),
|
||||
+ "failed to look up VO GRF\n");
|
||||
+ }
|
||||
+
|
||||
+ vpu_grf = syscon_regmap_lookup_by_compatible("rockchip,rk3528-vpu-grf");
|
||||
+ if (!IS_ERR(vpu_grf)) {
|
||||
+ nr_vpu_clks = rockchip_clk_find_max_clk_id(rk3528_vpu_clk_branches,
|
||||
+ nr_vpu_branches) + 1;
|
||||
+ nr_clks = max(nr_clks, nr_vpu_clks);
|
||||
+ } else if (PTR_ERR(vpu_grf) != -ENODEV) {
|
||||
+ return dev_err_probe(dev, PTR_ERR(vpu_grf),
|
||||
+ "failed to look up VPU GRF\n");
|
||||
+ }
|
||||
+
|
||||
ctx = rockchip_clk_init(np, reg_base, nr_clks);
|
||||
if (IS_ERR(ctx))
|
||||
return dev_err_probe(dev, PTR_ERR(ctx),
|
||||
@@ -1092,6 +1136,32 @@ static int __init clk_rk3528_probe(struc
|
||||
ARRAY_SIZE(rk3528_cpuclk_rates));
|
||||
rockchip_clk_register_branches(ctx, rk3528_clk_branches, nr_branches);
|
||||
|
||||
+ if (!IS_ERR(vo_grf)) {
|
||||
+ vo_grf_e = devm_kzalloc(dev, sizeof(*vo_grf_e), GFP_KERNEL);
|
||||
+ if (!vo_grf_e)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ vo_grf_e->grf = vo_grf;
|
||||
+ vo_grf_e->type = grf_type_vo;
|
||||
+ hash_add(ctx->aux_grf_table, &vo_grf_e->node, grf_type_vo);
|
||||
+
|
||||
+ rockchip_clk_register_branches(ctx, rk3528_vo_clk_branches,
|
||||
+ nr_vo_branches);
|
||||
+ }
|
||||
+
|
||||
+ if (!IS_ERR(vpu_grf)) {
|
||||
+ vpu_grf_e = devm_kzalloc(dev, sizeof(*vpu_grf_e), GFP_KERNEL);
|
||||
+ if (!vpu_grf_e)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ vpu_grf_e->grf = vpu_grf;
|
||||
+ vpu_grf_e->type = grf_type_vpu;
|
||||
+ hash_add(ctx->aux_grf_table, &vpu_grf_e->node, grf_type_vpu);
|
||||
+
|
||||
+ rockchip_clk_register_branches(ctx, rk3528_vpu_clk_branches,
|
||||
+ nr_vpu_branches);
|
||||
+ }
|
||||
+
|
||||
rk3528_rst_init(np, reg_base);
|
||||
|
||||
rockchip_register_restart_notifier(ctx, RK3528_GLB_SRST_FST, NULL);
|
||||
--- a/drivers/clk/rockchip/clk.h
|
||||
+++ b/drivers/clk/rockchip/clk.h
|
||||
@@ -218,6 +218,9 @@ struct clk;
|
||||
#define RK3528_CLKSEL_CON(x) ((x) * 0x4 + 0x300)
|
||||
#define RK3528_CLKGATE_CON(x) ((x) * 0x4 + 0x800)
|
||||
#define RK3528_SOFTRST_CON(x) ((x) * 0x4 + 0xa00)
|
||||
+#define RK3528_SDMMC_CON(x) ((x) * 0x4 + 0x24)
|
||||
+#define RK3528_SDIO0_CON(x) ((x) * 0x4 + 0x4)
|
||||
+#define RK3528_SDIO1_CON(x) ((x) * 0x4 + 0xc)
|
||||
#define RK3528_PMU_CLKSEL_CON(x) ((x) * 0x4 + 0x300 + RK3528_PMU_CRU_BASE)
|
||||
#define RK3528_PMU_CLKGATE_CON(x) ((x) * 0x4 + 0x800 + RK3528_PMU_CRU_BASE)
|
||||
#define RK3528_PCIE_CLKSEL_CON(x) ((x) * 0x4 + 0x300 + RK3528_PCIE_CRU_BASE)
|
||||
@@ -407,6 +410,8 @@ enum rockchip_grf_type {
|
||||
grf_type_pmu0,
|
||||
grf_type_pmu1,
|
||||
grf_type_ioc,
|
||||
+ grf_type_vo,
|
||||
+ grf_type_vpu,
|
||||
};
|
||||
|
||||
/* ceil(sqrt(enums in rockchip_grf_type - 1)) */
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user