diff --git a/config/kernel/linux-mvebu-default.config b/config/kernel/linux-mvebu-default.config index a6f413cbc..b6f57eba1 100644 --- a/config/kernel/linux-mvebu-default.config +++ b/config/kernel/linux-mvebu-default.config @@ -3279,7 +3279,7 @@ CONFIG_REGULATOR_GPIO=m # CONFIG_REGULATOR_MAX8973 is not set # CONFIG_REGULATOR_MT6311 is not set # CONFIG_REGULATOR_PFUZE100 is not set -CONFIG_REGULATOR_PWM=m +# CONFIG_REGULATOR_PWM is not set # CONFIG_REGULATOR_TPS51632 is not set # CONFIG_REGULATOR_TPS62360 is not set # CONFIG_REGULATOR_TPS65023 is not set @@ -3377,14 +3377,14 @@ CONFIG_LCD_LMS501KF03=m CONFIG_LCD_HX8357=m CONFIG_BACKLIGHT_CLASS_DEVICE=m CONFIG_BACKLIGHT_GENERIC=m -CONFIG_BACKLIGHT_PWM=m +# CONFIG_BACKLIGHT_PWM is not set CONFIG_BACKLIGHT_PM8941_WLED=m CONFIG_BACKLIGHT_ADP8860=m CONFIG_BACKLIGHT_ADP8870=m CONFIG_BACKLIGHT_88PM860X=m -CONFIG_BACKLIGHT_LM3630A=m +# CONFIG_BACKLIGHT_LM3630A is not set CONFIG_BACKLIGHT_LM3639=m -CONFIG_BACKLIGHT_LP855X=m +# CONFIG_BACKLIGHT_LP855X is not set CONFIG_BACKLIGHT_GPIO=m CONFIG_BACKLIGHT_LV5207LP=m CONFIG_BACKLIGHT_BD6107=m @@ -3856,7 +3856,7 @@ CONFIG_LEDS_GPIO=m # CONFIG_LEDS_PCA955X is not set # CONFIG_LEDS_PCA963X is not set # CONFIG_LEDS_DAC124S085 is not set -CONFIG_LEDS_PWM=m +# CONFIG_LEDS_PWM is not set CONFIG_LEDS_REGULATOR=m # CONFIG_LEDS_BD2802 is not set # CONFIG_LEDS_LT3593 is not set @@ -4228,7 +4228,7 @@ CONFIG_COMMON_CLK_SCPI=m # CONFIG_COMMON_CLK_SI570 is not set # CONFIG_COMMON_CLK_CDCE925 is not set # CONFIG_CLK_QORIQ is not set -CONFIG_COMMON_CLK_PWM=m +# CONFIG_COMMON_CLK_PWM is not set # CONFIG_COMMON_CLK_PXA is not set # CONFIG_COMMON_CLK_CDCE706 is not set CONFIG_MVEBU_CLK_COMMON=y @@ -4539,8 +4539,8 @@ CONFIG_IIO_SYSFS_TRIGGER=m # CONFIG_VME_BUS is not set CONFIG_PWM=y CONFIG_PWM_SYSFS=y -CONFIG_PWM_FSL_FTM=m -CONFIG_PWM_PCA9685=m +# CONFIG_PWM_FSL_FTM is not set +# CONFIG_PWM_PCA9685 is not set CONFIG_IRQCHIP=y CONFIG_ARM_GIC=y CONFIG_ARMADA_370_XP_IRQ=y diff --git a/config/kernel/linux-mvebu-next.config b/config/kernel/linux-mvebu-next.config index c3f34740b..cc75f2101 100644 --- a/config/kernel/linux-mvebu-next.config +++ b/config/kernel/linux-mvebu-next.config @@ -142,6 +142,7 @@ CONFIG_CPUSETS=y CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_PERF=y +# CONFIG_CGROUP_DEBUG is not set CONFIG_SOCK_CGROUP_DATA=y # CONFIG_CHECKPOINT_RESTORE is not set CONFIG_NAMESPACES=y @@ -175,6 +176,7 @@ CONFIG_SYSFS_SYSCALL=y # CONFIG_SYSCTL_SYSCALL is not set CONFIG_POSIX_TIMERS=y CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set # CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_PRINTK=y @@ -204,6 +206,7 @@ CONFIG_PERF_USE_VMALLOC=y # Kernel Performance Events And Counters # CONFIG_PERF_EVENTS=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set CONFIG_VM_EVENT_COUNTERS=y CONFIG_SLUB_DEBUG=y # CONFIG_SLUB_MEMCG_SYSFS_ON is not set @@ -516,6 +519,7 @@ CONFIG_PCI_SYSCALL=y # CONFIG_PCIEPORTBUS is not set CONFIG_PCI_MSI=y CONFIG_PCI_MSI_IRQ_DOMAIN=y +# CONFIG_PCI_DEBUG is not set # CONFIG_PCI_REALLOC_ENABLE_AUTO is not set # CONFIG_PCI_STUB is not set # CONFIG_PCI_IOV is not set @@ -615,6 +619,7 @@ CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 # CONFIG_CLEANCACHE is not set CONFIG_FRONTSWAP=y CONFIG_CMA=y +# CONFIG_CMA_DEBUG is not set # CONFIG_CMA_DEBUGFS is not set CONFIG_CMA_AREAS=7 CONFIG_ZSWAP=y @@ -1231,6 +1236,11 @@ CONFIG_INET_DCCP_DIAG=m CONFIG_IP_DCCP_CCID3=y # CONFIG_IP_DCCP_CCID3_DEBUG is not set CONFIG_IP_DCCP_TFRC_LIB=y + +# +# DCCP Kernel Hacking +# +# CONFIG_IP_DCCP_DEBUG is not set CONFIG_IP_SCTP=m # CONFIG_SCTP_DBG_OBJCNT is not set CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y @@ -1430,6 +1440,7 @@ CONFIG_BT_HS=y CONFIG_BT_LE=y CONFIG_BT_6LOWPAN=m CONFIG_BT_LEDS=y +# CONFIG_BT_SELFTEST is not set # CONFIG_BT_DEBUGFS is not set # @@ -1543,6 +1554,9 @@ CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y CONFIG_WANT_DEV_COREDUMP=y CONFIG_ALLOW_DEV_COREDUMP=y CONFIG_DEV_COREDUMP=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set # CONFIG_TEST_ASYNC_DRIVER_PROBE is not set # CONFIG_SYS_HYPERVISOR is not set # CONFIG_GENERIC_CPU_DEVICES is not set @@ -1608,7 +1622,7 @@ CONFIG_MTD_BLOCK=y # RAM/ROM/Flash chip drivers # CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_JEDECPROBE=m CONFIG_MTD_GEN_PROBE=y # CONFIG_MTD_CFI_ADV_OPTIONS is not set CONFIG_MTD_MAP_BANK_WIDTH_1=y @@ -1634,9 +1648,8 @@ CONFIG_MTD_CFI_UTIL=y # # CONFIG_MTD_COMPLEX_MAPPINGS is not set # CONFIG_MTD_PHYSMAP is not set -CONFIG_MTD_PHYSMAP_OF=y -# CONFIG_MTD_PHYSMAP_OF_VERSATILE is not set -# CONFIG_MTD_PHYSMAP_OF_GEMINI is not set +# CONFIG_MTD_PHYSMAP_OF is not set +# CONFIG_MTD_IMPA7 is not set # CONFIG_MTD_INTEL_VR_NOR is not set # CONFIG_MTD_PLATRAM is not set @@ -1675,6 +1688,7 @@ CONFIG_OF=y # CONFIG_OF_UNITTEST is not set CONFIG_OF_FLATTREE=y CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_DYNAMIC=y CONFIG_OF_ADDRESS=y CONFIG_OF_ADDRESS_PCI=y CONFIG_OF_IRQ=y @@ -1683,7 +1697,8 @@ CONFIG_OF_MDIO=y CONFIG_OF_PCI=y CONFIG_OF_PCI_IRQ=y CONFIG_OF_RESERVED_MEM=y -# CONFIG_OF_OVERLAY is not set +CONFIG_OF_RESOLVE=y +CONFIG_OF_OVERLAY=y CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_PARPORT is not set CONFIG_BLK_DEV=y @@ -2568,12 +2583,20 @@ CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y CONFIG_VT_CONSOLE_SLEEP=y CONFIG_HW_CONSOLE=y -# CONFIG_VT_HW_CONSOLE_BINDING is not set +CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_UNIX98_PTYS=y CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=256 -# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_ROCKETPORT is not set +# CONFIG_CYCLADES is not set +# CONFIG_MOXA_INTELLIO is not set +# CONFIG_MOXA_SMARTIO is not set +# CONFIG_SYNCLINKMP is not set +# CONFIG_SYNCLINK_GT is not set # CONFIG_NOZOMI is not set +# CONFIG_ISI is not set +# CONFIG_N_HDLC is not set # CONFIG_N_GSM is not set # CONFIG_TRACE_SINK is not set CONFIG_DEVMEM=y @@ -2592,8 +2615,12 @@ CONFIG_SERIAL_8250_PCI=y # CONFIG_SERIAL_8250_EXAR is not set CONFIG_SERIAL_8250_NR_UARTS=4 CONFIG_SERIAL_8250_RUNTIME_UARTS=4 -# CONFIG_SERIAL_8250_EXTENDED is not set -CONFIG_SERIAL_8250_ASPEED_VUART=m +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +# CONFIG_SERIAL_8250_ASPEED_VUART is not set +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DETECT_IRQ=y +CONFIG_SERIAL_8250_RSA=y CONFIG_SERIAL_8250_FSL=y CONFIG_SERIAL_8250_DW=y # CONFIG_SERIAL_8250_EM is not set @@ -2605,11 +2632,13 @@ CONFIG_SERIAL_OF_PLATFORM=y # Non-8250 serial port support # # CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST is not set +# CONFIG_SERIAL_KGDB_NMI is not set # CONFIG_SERIAL_MAX3100 is not set # CONFIG_SERIAL_MAX310X is not set # CONFIG_SERIAL_UARTLITE is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_CONSOLE_POLL=y # CONFIG_SERIAL_JSM is not set # CONFIG_SERIAL_SCCNXP is not set # CONFIG_SERIAL_SC16IS7XX is not set @@ -2706,6 +2735,7 @@ CONFIG_I2C_MV64XXX=y # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set CONFIG_SPI_MASTER=y # @@ -2767,6 +2797,7 @@ CONFIG_PINCTRL=y # CONFIG_PINMUX=y CONFIG_PINCONF=y +# CONFIG_DEBUG_PINCTRL is not set # CONFIG_PINCTRL_AMD is not set # CONFIG_PINCTRL_MCP23S08 is not set # CONFIG_PINCTRL_SINGLE is not set @@ -2782,7 +2813,9 @@ CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y CONFIG_GPIOLIB=y CONFIG_OF_GPIO=y CONFIG_GPIOLIB_IRQCHIP=y +# CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_GENERIC=y # # Memory mapped GPIO drivers @@ -2791,12 +2824,12 @@ CONFIG_GPIO_SYSFS=y # CONFIG_GPIO_ALTERA is not set # CONFIG_GPIO_DWAPB is not set # CONFIG_GPIO_FTGPIO010 is not set -# CONFIG_GPIO_GENERIC_PLATFORM is not set +CONFIG_GPIO_GENERIC_PLATFORM=y # CONFIG_GPIO_GRGPIO is not set # CONFIG_GPIO_MOCKUP is not set # CONFIG_GPIO_MPC8XXX is not set CONFIG_GPIO_MVEBU=y -# CONFIG_GPIO_SYSCON is not set +CONFIG_GPIO_SYSCON=y # CONFIG_GPIO_XILINX is not set # CONFIG_GPIO_ZEVIO is not set @@ -2877,7 +2910,7 @@ CONFIG_HWMON=y # CONFIG_SENSORS_GL520SM is not set # CONFIG_SENSORS_G760A is not set # CONFIG_SENSORS_G762 is not set -CONFIG_SENSORS_GPIO_FAN=y +CONFIG_SENSORS_GPIO_FAN=m # CONFIG_SENSORS_HIH6130 is not set # CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_JC42 is not set @@ -2908,7 +2941,7 @@ CONFIG_SENSORS_MAX31790=m # CONFIG_SENSORS_LM63 is not set # CONFIG_SENSORS_LM70 is not set # CONFIG_SENSORS_LM73 is not set -# CONFIG_SENSORS_LM75 is not set +CONFIG_SENSORS_LM75=m # CONFIG_SENSORS_LM77 is not set # CONFIG_SENSORS_LM78 is not set # CONFIG_SENSORS_LM80 is not set @@ -2930,6 +2963,7 @@ CONFIG_SENSORS_MAX31790=m # CONFIG_SENSORS_NCT7904 is not set # CONFIG_SENSORS_PCF8591 is not set # CONFIG_PMBUS is not set +CONFIG_SENSORS_PWM_FAN=m # CONFIG_SENSORS_SHT15 is not set # CONFIG_SENSORS_SHT21 is not set # CONFIG_SENSORS_SHT3x is not set @@ -2978,7 +3012,7 @@ CONFIG_THERMAL=y CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 CONFIG_THERMAL_HWMON=y CONFIG_THERMAL_OF=y -# CONFIG_THERMAL_WRITABLE_TRIPS is not set +CONFIG_THERMAL_WRITABLE_TRIPS=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set @@ -3000,7 +3034,7 @@ CONFIG_ARMADA_THERMAL=y # CONFIG_WATCHDOG=y CONFIG_WATCHDOG_CORE=y -# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WATCHDOG_NOWAYOUT=y CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y # CONFIG_WATCHDOG_SYSFS is not set @@ -3181,7 +3215,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y # CONFIG_REGULATOR_DA9210 is not set # CONFIG_REGULATOR_DA9211 is not set # CONFIG_REGULATOR_FAN53555 is not set -# CONFIG_REGULATOR_GPIO is not set +CONFIG_REGULATOR_GPIO=m # CONFIG_REGULATOR_ISL9305 is not set # CONFIG_REGULATOR_ISL6271A is not set # CONFIG_REGULATOR_LP3971 is not set @@ -3200,6 +3234,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y # CONFIG_REGULATOR_PV88060 is not set # CONFIG_REGULATOR_PV88080 is not set # CONFIG_REGULATOR_PV88090 is not set +# CONFIG_REGULATOR_PWM is not set # CONFIG_REGULATOR_TPS51632 is not set # CONFIG_REGULATOR_TPS62360 is not set # CONFIG_REGULATOR_TPS65023 is not set @@ -3391,7 +3426,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y # Miscellaneous USB options # CONFIG_USB_DEFAULT_PERSIST=y -# CONFIG_USB_DYNAMIC_MINORS is not set +CONFIG_USB_DYNAMIC_MINORS=y # CONFIG_USB_OTG is not set # CONFIG_USB_OTG_WHITELIST is not set CONFIG_USB_LEDS_TRIGGER_USBPORT=y @@ -3452,7 +3487,7 @@ CONFIG_USB_STORAGE=y # CONFIG_USB_STORAGE_KARMA is not set # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set # CONFIG_USB_STORAGE_ENE_UB6250 is not set -# CONFIG_USB_UAS is not set +CONFIG_USB_UAS=m # # USB Imaging devices @@ -3565,9 +3600,9 @@ CONFIG_USB_ATM=m # # USB Physical Layer drivers # -# CONFIG_USB_PHY is not set +CONFIG_USB_PHY=y # CONFIG_NOP_USB_XCEIV is not set -# CONFIG_USB_GPIO_VBUS is not set +CONFIG_USB_GPIO_VBUS=y # CONFIG_USB_ISP1301 is not set # CONFIG_USB_ULPI is not set # CONFIG_USB_GADGET is not set @@ -3628,7 +3663,7 @@ CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y # CONFIG_LEDS_LM3530 is not set # CONFIG_LEDS_LM3642 is not set # CONFIG_LEDS_PCA9532 is not set -# CONFIG_LEDS_GPIO is not set +CONFIG_LEDS_GPIO=y # CONFIG_LEDS_LP3944 is not set # CONFIG_LEDS_LP3952 is not set # CONFIG_LEDS_LP5521 is not set @@ -3639,6 +3674,7 @@ CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y # CONFIG_LEDS_PCA955X is not set # CONFIG_LEDS_PCA963X is not set # CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_PWM is not set # CONFIG_LEDS_REGULATOR is not set # CONFIG_LEDS_BD2802 is not set # CONFIG_LEDS_LT3593 is not set @@ -3661,21 +3697,21 @@ CONFIG_LEDS_USER=m # CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGER_TIMER=y -# CONFIG_LEDS_TRIGGER_ONESHOT is not set +CONFIG_LEDS_TRIGGER_ONESHOT=m CONFIG_LEDS_TRIGGER_DISK=y -# CONFIG_LEDS_TRIGGER_MTD is not set +CONFIG_LEDS_TRIGGER_MTD=y CONFIG_LEDS_TRIGGER_HEARTBEAT=y # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set -# CONFIG_LEDS_TRIGGER_CPU is not set -# CONFIG_LEDS_TRIGGER_GPIO is not set -# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_GPIO=m +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m # # iptables trigger is under Netfilter config (LED target) # -# CONFIG_LEDS_TRIGGER_TRANSIENT is not set -# CONFIG_LEDS_TRIGGER_CAMERA is not set -# CONFIG_LEDS_TRIGGER_PANIC is not set +CONFIG_LEDS_TRIGGER_TRANSIENT=m +CONFIG_LEDS_TRIGGER_CAMERA=m +CONFIG_LEDS_TRIGGER_PANIC=y # CONFIG_ACCESSIBILITY is not set # CONFIG_INFINIBAND is not set CONFIG_EDAC_ATOMIC_SCRUB=y @@ -3899,6 +3935,7 @@ CONFIG_COMMON_CLK=y # CONFIG_COMMON_CLK_CS2000_CP is not set CONFIG_CLK_QORIQ=y # CONFIG_COMMON_CLK_NXP is not set +# CONFIG_COMMON_CLK_PWM is not set # CONFIG_COMMON_CLK_PXA is not set # CONFIG_COMMON_CLK_PIC32 is not set # CONFIG_COMMON_CLK_VC5 is not set @@ -3964,13 +4001,25 @@ CONFIG_CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK=y # CONFIG_SUNXI_SRAM is not set # CONFIG_SOC_TI is not set # CONFIG_PM_DEVFREQ is not set -# CONFIG_EXTCON is not set +CONFIG_EXTCON=y + +# +# Extcon Device Drivers +# +# CONFIG_EXTCON_GPIO is not set +# CONFIG_EXTCON_MAX3355 is not set +# CONFIG_EXTCON_RT8973A is not set +# CONFIG_EXTCON_SM5502 is not set +CONFIG_EXTCON_USB_GPIO=m CONFIG_MEMORY=y CONFIG_MVEBU_DEVBUS=y # CONFIG_IIO is not set # CONFIG_NTB is not set # CONFIG_VME_BUS is not set -# CONFIG_PWM is not set +CONFIG_PWM=y +CONFIG_PWM_SYSFS=y +# CONFIG_PWM_FSL_FTM is not set +# CONFIG_PWM_PCA9685 is not set CONFIG_IRQCHIP=y CONFIG_ARM_GIC=y CONFIG_ARM_GIC_MAX_NR=1 @@ -4234,6 +4283,7 @@ CONFIG_NFSD_V4=y # CONFIG_NFSD_SCSILAYOUT is not set # CONFIG_NFSD_FLEXFILELAYOUT is not set # CONFIG_NFSD_V4_SECURITY_LABEL is not set +# CONFIG_NFSD_FAULT_INJECTION is not set CONFIG_GRACE_PERIOD=y CONFIG_LOCKD=y CONFIG_LOCKD_V4=y @@ -4329,64 +4379,113 @@ CONFIG_NLS_UTF8=y CONFIG_PRINTK_TIME=y CONFIG_CONSOLE_LOGLEVEL_DEFAULT=2 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +# CONFIG_BOOT_PRINTK_DELAY is not set # CONFIG_DYNAMIC_DEBUG is not set # # Compile-time checks and compiler options # +# CONFIG_DEBUG_INFO is not set CONFIG_ENABLE_WARN_DEPRECATED=y CONFIG_ENABLE_MUST_CHECK=y CONFIG_FRAME_WARN=1024 # CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_READABLE_ASM is not set # CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_PAGE_OWNER is not set CONFIG_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set # CONFIG_DEBUG_SECTION_MISMATCH is not set CONFIG_SECTION_MISMATCH_WARN_ONLY=y -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 +CONFIG_MAGIC_SYSRQ_SERIAL=y +CONFIG_DEBUG_KERNEL=y # # Memory Debugging # CONFIG_PAGE_EXTENSION=y +# CONFIG_DEBUG_PAGEALLOC is not set # CONFIG_PAGE_POISONING is not set # CONFIG_DEBUG_RODATA_TEST is not set +# CONFIG_DEBUG_OBJECTS is not set # CONFIG_SLUB_DEBUG_ON is not set # CONFIG_SLUB_STATS is not set CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_VM is not set CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y +# CONFIG_DEBUG_VIRTUAL is not set CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_DEBUG_HIGHMEM is not set +# CONFIG_DEBUG_SHIRQ is not set # # Debug Lockups and Hangs # +# CONFIG_SOFTLOCKUP_DETECTOR is not set +# CONFIG_DETECT_HUNG_TASK is not set +# CONFIG_WQ_WATCHDOG is not set # CONFIG_PANIC_ON_OOPS is not set CONFIG_PANIC_ON_OOPS_VALUE=0 CONFIG_PANIC_TIMEOUT=0 +CONFIG_SCHED_DEBUG=y CONFIG_SCHED_INFO=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_SCHED_STACK_END_CHECK is not set # CONFIG_DEBUG_TIMEKEEPING is not set # # Lock Debugging (spinlocks, mutexes, etc...) # +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_LOCK_TORTURE_TEST is not set # CONFIG_WW_MUTEX_SELFTEST is not set # CONFIG_STACKTRACE is not set # CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set +# CONFIG_DEBUG_KOBJECT is not set CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_PI_LIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set # # RCU Debugging # # CONFIG_PROVE_RCU is not set # CONFIG_TORTURE_TEST is not set +# CONFIG_RCU_PERF_TEST is not set +# CONFIG_RCU_TORTURE_TEST is not set CONFIG_RCU_CPU_STALL_TIMEOUT=21 +CONFIG_RCU_TRACE=y +# CONFIG_RCU_EQS_DEBUG is not set +# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set +# CONFIG_NOTIFIER_ERROR_INJECTION is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_LATENCYTOP is not set CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_DYNAMIC_FTRACE=y CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_TRACE_CLOCK=y CONFIG_TRACING_SUPPORT=y # CONFIG_FTRACE is not set # CONFIG_DMA_API_DEBUG is not set @@ -4397,6 +4496,10 @@ CONFIG_TRACING_SUPPORT=y # CONFIG_LKDTM is not set # CONFIG_TEST_LIST_SORT is not set # CONFIG_TEST_SORT is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_RBTREE_TEST is not set +# CONFIG_INTERVAL_TREE_TEST is not set +# CONFIG_PERCPU_TEST is not set # CONFIG_ATOMIC64_SELFTEST is not set # CONFIG_ASYNC_RAID6_TEST is not set CONFIG_TEST_HEXDUMP=m @@ -4423,11 +4526,28 @@ CONFIG_HAVE_ARCH_KGDB=y # CONFIG_UBSAN is not set CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y # CONFIG_STRICT_DEVMEM is not set +# CONFIG_ARM_PTDUMP is not set CONFIG_ARM_UNWIND=y # CONFIG_DEBUG_USER is not set -CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" -# CONFIG_DEBUG_UART_8250 is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_MVEBU_UART0 is not set +CONFIG_DEBUG_MVEBU_UART0_ALTERNATE=y +# CONFIG_DEBUG_MVEBU_UART1_ALTERNATE is not set +# CONFIG_DEBUG_ICEDCC is not set +# CONFIG_DEBUG_SEMIHOSTING is not set +# CONFIG_DEBUG_LL_UART_8250 is not set +# CONFIG_DEBUG_LL_UART_PL01X is not set +CONFIG_DEBUG_LL_INCLUDE="debug/8250.S" +CONFIG_DEBUG_UART_8250=y +CONFIG_DEBUG_UART_PHYS=0xf1012000 +CONFIG_DEBUG_UART_VIRT=0xfec12000 +CONFIG_DEBUG_UART_8250_SHIFT=2 +# CONFIG_DEBUG_UART_8250_WORD is not set +# CONFIG_DEBUG_UART_8250_PALMCHIP is not set +# CONFIG_DEBUG_UART_8250_FLOW_CONTROL is not set +CONFIG_DEBUG_UNCOMPRESS=y CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" +CONFIG_EARLY_PRINTK=y # CONFIG_PID_IN_CONTEXTIDR is not set # CONFIG_CORESIGHT is not set diff --git a/config/sources/mvebu-helios4.inc b/config/sources/mvebu-helios4.inc index e88826109..a29de9f7f 100644 --- a/config/sources/mvebu-helios4.inc +++ b/config/sources/mvebu-helios4.inc @@ -19,14 +19,14 @@ esac family_tweaks_s() { chroot $SDCARD /bin/bash -c "apt-get -y -qq install fancontrol >/dev/null 2>&1" + cp -R $SRC/packages/bsp/helios4/90-helios4-hwmon.rules $SDCARD/etc/udev/rules.d/ case $BRANCH in default) - cp -R $SRC/packages/bsp/helios4/fancontrol_gpio-fan.conf $SDCARD/etc/fancontrol + cp -R $SRC/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-default.conf $SDCARD/etc/fancontrol ;; next) - cp -R $SRC/packages/bsp/helios4/fancontrol_pwm-fan.conf $SDCARD/etc/fancontrol - patch $SDCARD/usr/sbin/fancontrol < $SRC/packages/bsp/helios4/fancontrol.patch + cp -R $SRC/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-next.conf $SDCARD/etc/fancontrol ;; esac } diff --git a/packages/bsp/helios4/90-helios4-hwmon.rules b/packages/bsp/helios4/90-helios4-hwmon.rules new file mode 100755 index 000000000..8214adf81 --- /dev/null +++ b/packages/bsp/helios4/90-helios4-hwmon.rules @@ -0,0 +1,24 @@ +# Helios4 persistent hwmon + +ACTION=="remove", GOTO="helios4_hwmon_end" + +# +KERNELS=="j10-pwm", SUBSYSTEMS=="platform", ENV{_HELIOS4_FAN_}="j10", ENV{_IS_HELIOS4_FAN_}="1", ENV{IS_HELIOS4_HWMON}="1" +KERNELS=="j17-pwm", SUBSYSTEMS=="platform", ENV{_HELIOS4_FAN_}="j17", ENV{_IS_HELIOS4_FAN_}="1", ENV{IS_HELIOS4_HWMON}="1" +KERNELS=="0-004c", SUBSYSTEMS=="i2c", DRIVERS=="lm75", ENV{IS_HELIOS4_HWMON}="1" + +SUBSYSTEM!="hwmon", GOTO="helios4_hwmon_end" + +ENV{HWMON_PATH}="/sys%p" +# +ATTR{name}=="f1072004mdiomii00", ENV{IS_HELIOS4_HWMON}="1", ENV{HELIOS4_SYMLINK}="/dev/thermal-eth" +ATTR{name}=="armada_thermal", ENV{IS_HELIOS4_HWMON}="1", ENV{HELIOS4_SYMLINK}="/dev/thermal-cpu" +# +ENV{IS_HELIOS4_HWMON}=="1", ATTR{name}=="lm75", ENV{HELIOS4_SYMLINK}="/dev/thermal-board" +ENV{_IS_HELIOS4_FAN_}=="1", ENV{HELIOS4_SYMLINK}="/dev/fan-$env{_HELIOS4_FAN_}" + +# +ENV{IS_HELIOS4_HWMON}=="1", RUN+="/bin/ln -sf $env{HWMON_PATH} $env{HELIOS4_SYMLINK}" + +LABEL="helios4_hwmon_end" + diff --git a/packages/bsp/helios4/fancontrol.patch b/packages/bsp/helios4/fancontrol.patch deleted file mode 100644 index ce9ee7670..000000000 --- a/packages/bsp/helios4/fancontrol.patch +++ /dev/null @@ -1,12 +0,0 @@ -@@ -157,9 +157,9 @@ - - function DevicePath() - { -- if [ -h "$1/device" ] -+ if [ -h "$1" ] - then -- readlink -f "$1/device" | sed -e 's/^\/sys\///' -+ readlink -f "$1" | sed -e 's/^\/sys\///;s/\/hwmon\/.*//' - fi - } - diff --git a/packages/bsp/helios4/fancontrol_gpio-fan.conf b/packages/bsp/helios4/fancontrol_gpio-fan.conf deleted file mode 100644 index 556c823c4..000000000 --- a/packages/bsp/helios4/fancontrol_gpio-fan.conf +++ /dev/null @@ -1,12 +0,0 @@ -# Helios4 GPIO Fan Control Configuration -# This is a temporary configuration while relying on gpio-fan driver. -# Only low or full speed is supported. -# Temp source : lm75 sensor -INTERVAL=10 -DEVPATH=hwmon0=devices/platform/j10-pwm hwmon1=devices/platform/j17-pwm hwmon2=devices/platform/soc/soc:internal-regs/f1011000.i2c/i2c-0/0-004c -DEVNAME=hwmon0=gpio_fan hwmon1=gpio_fan hwmon2=lm75 -FCTEMPS=hwmon0/pwm1=hwmon2/temp1_input hwmon1/pwm1=hwmon2/temp1_input -MINTEMP=hwmon0/pwm1=45 hwmon1/pwm1=45 -MAXTEMP=hwmon0/pwm1=65 hwmon1/pwm1=65 -MINSTART=hwmon0/pwm1=1 hwmon1/pwm1=1 -MINSTOP=hwmon0/pwm1=0 hwmon1/pwm1=0 diff --git a/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-default.conf b/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-default.conf new file mode 100644 index 000000000..21677774b --- /dev/null +++ b/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-default.conf @@ -0,0 +1,11 @@ +# Helios4 PWM Fan Control Configuration +# Temp source : /dev/thermal-board +INTERVAL=10 +FCTEMPS=/dev/fan-j10/pwm1=/dev/thermal-board/temp1_input /dev/fan-j17/pwm1=/dev/thermal-board/temp1_input +MINTEMP=/dev/fan-j10/pwm1=45 /dev/fan-j17/pwm1=45 +MAXTEMP=/dev/fan-j10/pwm1=70 /dev/fan-j17/pwm1=70 +MINSTART=/dev/fan-j10/pwm1=50 /dev/fan-j17/pwm1=50 +MINSTOP=/dev/fan-j10/pwm1=50 /dev/fan-j17/pwm1=50 +MINPWM=/dev/fan-j10/pwm1=50 /dev/fan-j17/pwm1=50 + + diff --git a/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-next.conf b/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-next.conf new file mode 100644 index 000000000..2e815954b --- /dev/null +++ b/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-next.conf @@ -0,0 +1,10 @@ +# Helios4 PWM Fan Control Configuration +# Temp source : /dev/thermal-cpu +INTERVAL=10 +FCTEMPS=/dev/fan-j10/pwm1=/dev/thermal-cpu/temp1_input /dev/fan-j17/pwm1=/dev/thermal-cpu/temp1_input +MINTEMP=/dev/fan-j10/pwm1=55 /dev/fan-j17/pwm1=55 +MAXTEMP=/dev/fan-j10/pwm1=95 /dev/fan-j17/pwm1=95 +MINSTART=/dev/fan-j10/pwm1=50 /dev/fan-j17/pwm1=50 +MINSTOP=/dev/fan-j10/pwm1=50 /dev/fan-j17/pwm1=50 +MINPWM=/dev/fan-j10/pwm1=50 /dev/fan-j17/pwm1=50 + diff --git a/packages/bsp/helios4/fancontrol_pwm-fan.conf b/packages/bsp/helios4/fancontrol_pwm-fan.conf deleted file mode 100644 index 9bd9dc181..000000000 --- a/packages/bsp/helios4/fancontrol_pwm-fan.conf +++ /dev/null @@ -1,11 +0,0 @@ -# Helios4 PWM Fan Control Configuration -# Temp source : armada_thermal sensor -INTERVAL=10 -DEVPATH=hwmon1=devices/virtual hwmon2=devices/platform/j10-pwm hwmon3=devices/platform/j17-pwm hwmon4=devices/platform/soc/soc:internal-regs/f1011000.i2c/i2c-0/0-004c -DEVNAME=hwmon1=armada_thermal hwmon2=pwmfan hwmon3=pwmfan hwmon4=lm75 -FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input hwmon3/pwm1=hwmon1/temp1_input -MINTEMP=hwmon2/pwm1=55 hwmon3/pwm1=55 -MAXTEMP=hwmon2/pwm1=95 hwmon3/pwm1=95 -MINSTART=hwmon2/pwm1=100 hwmon3/pwm1=100 -MINSTOP=hwmon2/pwm1=50 hwmon3/pwm1=50 - diff --git a/patch/kernel/mvebu-default/92-gpio-mvebu-enable_hardware_pwm_support.patch b/patch/kernel/mvebu-default/92-gpio-mvebu-enable_hardware_pwm_support.patch new file mode 100644 index 000000000..9ebe57360 --- /dev/null +++ b/patch/kernel/mvebu-default/92-gpio-mvebu-enable_hardware_pwm_support.patch @@ -0,0 +1,523 @@ + arch/arm/boot/dts/armada-38x.dtsi | 16 +- + drivers/gpio/gpio-mvebu.c | 369 +++++++++++++++++++++++++++-- + 2 files changed, 367 insertions(+), 18 deletions(-) + +diff --git a/arch/arm/boot/dts/armada-38x.dtsi b/arch/arm/boot/dts/armada-38x.dtsi +index e4e1546..5894e45 100644 +--- a/arch/arm/boot/dts/armada-38x.dtsi ++++ b/arch/arm/boot/dts/armada-38x.dtsi +@@ -339,31 +339,39 @@ + }; + + gpio0: gpio@18100 { +- compatible = "marvell,orion-gpio"; +- reg = <0x18100 0x40>; ++ compatible = "marvell,armada-370-gpio", ++ "marvell,orion-gpio"; ++ reg = <0x18100 0x40>, <0x181c0 0x08>; ++ reg-names = "gpio", "pwm"; + ngpios = <32>; + gpio-controller; + #gpio-cells = <2>; ++ #pwm-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + interrupts = , + , + , + ; ++ clocks = <&coreclk 0>; + }; + + gpio1: gpio@18140 { +- compatible = "marvell,orion-gpio"; +- reg = <0x18140 0x40>; ++ compatible = "marvell,armada-370-gpio", ++ "marvell,orion-gpio"; ++ reg = <0x18140 0x40>, <0x181c8 0x08>; ++ reg-names = "gpio", "pwm"; + ngpios = <28>; + gpio-controller; + #gpio-cells = <2>; ++ #pwm-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + interrupts = , + , + , + ; ++ clocks = <&coreclk 0>; + }; + + system-controller@18200 { +diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c +index ffea532..9fe65f7 100644 +--- a/drivers/gpio/gpio-mvebu.c ++++ b/drivers/gpio/gpio-mvebu.c +@@ -42,29 +42,43 @@ + #include + #include + #include ++#include + #include + #include + #include ++#include ++ ++#include "gpiolib.h" + + /* + * GPIO unit register offsets. + */ +-#define GPIO_OUT_OFF 0x0000 +-#define GPIO_IO_CONF_OFF 0x0004 +-#define GPIO_BLINK_EN_OFF 0x0008 +-#define GPIO_IN_POL_OFF 0x000c +-#define GPIO_DATA_IN_OFF 0x0010 +-#define GPIO_EDGE_CAUSE_OFF 0x0014 +-#define GPIO_EDGE_MASK_OFF 0x0018 +-#define GPIO_LEVEL_MASK_OFF 0x001c ++#define GPIO_OUT_OFF 0x0000 ++#define GPIO_IO_CONF_OFF 0x0004 ++#define GPIO_BLINK_EN_OFF 0x0008 ++#define GPIO_IN_POL_OFF 0x000c ++#define GPIO_DATA_IN_OFF 0x0010 ++#define GPIO_EDGE_CAUSE_OFF 0x0014 ++#define GPIO_EDGE_MASK_OFF 0x0018 ++#define GPIO_LEVEL_MASK_OFF 0x001c ++#define GPIO_BLINK_CNT_SELECT_OFF 0x0020 ++ ++/* ++ * PWM register offsets. ++ */ ++#define PWM_BLINK_ON_DURATION_OFF 0x0 ++#define PWM_BLINK_OFF_DURATION_OFF 0x4 ++ + + /* The MV78200 has per-CPU registers for edge mask and level mask */ + #define GPIO_EDGE_MASK_MV78200_OFF(cpu) ((cpu) ? 0x30 : 0x18) + #define GPIO_LEVEL_MASK_MV78200_OFF(cpu) ((cpu) ? 0x34 : 0x1C) + +-/* The Armada XP has per-CPU registers for interrupt cause, interrupt ++/* ++ * The Armada XP has per-CPU registers for interrupt cause, interrupt + * mask and interrupt level mask. Those are relative to the +- * percpu_membase. */ ++ * percpu_membase. ++ */ + #define GPIO_EDGE_CAUSE_ARMADAXP_OFF(cpu) ((cpu) * 0x4) + #define GPIO_EDGE_MASK_ARMADAXP_OFF(cpu) (0x10 + (cpu) * 0x4) + #define GPIO_LEVEL_MASK_ARMADAXP_OFF(cpu) (0x20 + (cpu) * 0x4) +@@ -75,6 +89,41 @@ + + #define MVEBU_MAX_GPIO_PER_BANK 32 + ++enum mvebu_pwm_ctrl { ++ MVEBU_PWM_CTRL_SET_A = 0, ++ MVEBU_PWM_CTRL_SET_B, ++ MVEBU_PWM_CTRL_MAX ++}; ++ ++struct mvebu_pwmchip { ++ void __iomem *membase; ++ unsigned long clk_rate; ++ spinlock_t lock; ++ bool in_use; ++ ++ /* Used to preserve GPIO/PWM registers across suspend/resume */ ++ u32 blink_on_duration; ++ u32 blink_off_duration; ++}; ++ ++struct mvebu_pwm_chip_drv { ++ enum mvebu_pwm_ctrl ctrl; ++ struct gpio_desc *gpiod; ++ bool master; ++}; ++ ++struct mvebu_pwm { ++ struct pwm_chip chip; ++ struct mvebu_gpio_chip *mvchip; ++ struct mvebu_pwmchip controller; ++ enum mvebu_pwm_ctrl default_counter; ++ ++ /* Used to preserve GPIO/PWM registers across suspend/resume */ ++ u32 blink_select; ++}; ++ ++static struct mvebu_pwmchip *mvebu_pwm_list[MVEBU_PWM_CTRL_MAX]; ++ + struct mvebu_gpio_chip { + struct gpio_chip chip; + spinlock_t lock; +@@ -84,6 +133,10 @@ struct mvebu_gpio_chip { + struct irq_domain *domain; + int soc_variant; + ++ /* Used for PWM support */ ++ struct clk *clk; ++ struct mvebu_pwm *mvpwm; ++ + /* Used to preserve GPIO registers across suspend/resume */ + u32 out_reg; + u32 io_conf_reg; +@@ -102,6 +155,11 @@ static inline void __iomem *mvebu_gpioreg_out(struct mvebu_gpio_chip *mvchip) + return mvchip->membase + GPIO_OUT_OFF; + } + ++static void __iomem *mvebu_gpioreg_blink_select(struct mvebu_gpio_chip *mvchip) ++{ ++ return mvchip->membase + GPIO_BLINK_CNT_SELECT_OFF; ++} ++ + static inline void __iomem *mvebu_gpioreg_blink(struct mvebu_gpio_chip *mvchip) + { + return mvchip->membase + GPIO_BLINK_EN_OFF; +@@ -182,6 +240,20 @@ static void __iomem *mvebu_gpioreg_level_mask(struct mvebu_gpio_chip *mvchip) + } + + /* ++ * Functions returning addresses of individual registers for a given ++ * PWM controller. ++ */ ++static void __iomem *mvebu_pwmreg_blink_on_duration(struct mvebu_pwmchip *mvpwm) ++{ ++ return mvpwm->membase + PWM_BLINK_ON_DURATION_OFF; ++} ++ ++static void __iomem *mvebu_pwmreg_blink_off_duration(struct mvebu_pwmchip *mvpwm) ++{ ++ return mvpwm->membase + PWM_BLINK_OFF_DURATION_OFF; ++} ++ ++/* + * Functions implementing the gpio_chip methods + */ + +@@ -489,6 +561,262 @@ static void mvebu_gpio_irq_handler(struct irq_desc *desc) + chained_irq_exit(chip, desc); + } + ++/* ++ * Functions implementing the pwm_chip methods ++ */ ++static struct mvebu_pwm *to_mvebu_pwm(struct pwm_chip *chip) ++{ ++ return container_of(chip, struct mvebu_pwm, chip); ++} ++ ++static int mvebu_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm) ++{ ++ struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip); ++ struct mvebu_gpio_chip *mvchip = mvpwm->mvchip; ++ struct gpio_desc *desc; ++ enum mvebu_pwm_ctrl id; ++ int ret = 0; ++ struct mvebu_pwm_chip_drv *chip_data; ++ u32 u; ++ ++ spin_lock(&mvpwm->controller.lock); ++ ++ mvchip->blink_en_reg = readl_relaxed(mvebu_gpioreg_blink(mvchip)); ++ if (pwm->chip_data || (mvchip->blink_en_reg & BIT(pwm->hwpwm))) ++ return -EBUSY; ++ ++ desc = gpio_to_desc(mvchip->chip.base + pwm->hwpwm); ++ if (!desc) { ++ ret = -ENODEV; ++ goto out; ++ } ++ ++ ret = gpiod_request(desc, "mvebu-pwm"); ++ if (ret) ++ goto out; ++ ++ ret = gpiod_direction_output(desc, 0); ++ if (ret) { ++ gpiod_free(desc); ++ goto out; ++ } ++ ++ chip_data = kzalloc(sizeof(struct mvebu_pwm_chip_drv), GFP_KERNEL); ++ if (!chip_data) { ++ gpiod_free(desc); ++ ret = -ENOMEM; ++ goto out; ++ } ++ ++ for (id = MVEBU_PWM_CTRL_SET_A;id < MVEBU_PWM_CTRL_MAX; id++) { ++ if (!mvebu_pwm_list[id]->in_use) { ++ chip_data->ctrl = id; ++ chip_data->master = true; ++ mvebu_pwm_list[id]->in_use = true; ++ break; ++ } ++ } ++ ++ if (!chip_data->master) ++ chip_data->ctrl = mvpwm->default_counter; ++ ++ u = readl_relaxed(mvebu_gpioreg_blink_select(mvchip)); ++ if (id) ++ u |= (1 << pwm->hwpwm); ++ else ++ u &= ~(1 << pwm->hwpwm); ++ writel_relaxed(u, mvebu_gpioreg_blink_select(mvchip)); ++ ++ chip_data->gpiod = desc; ++ pwm->chip_data = chip_data; ++ mvpwm->blink_select = u; ++out: ++ spin_unlock(&mvpwm->controller.lock); ++ return ret; ++} ++ ++static void mvebu_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm) ++{ ++ struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip); ++ struct mvebu_pwm_chip_drv *chip_data = (struct mvebu_pwm_chip_drv*) pwm->chip_data; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&mvpwm->controller.lock, flags); ++ if (chip_data->master) ++ mvebu_pwm_list[chip_data->ctrl]->in_use = false; ++ ++ gpiod_free(chip_data->gpiod); ++ kfree(chip_data); ++ pwm->chip_data = NULL; ++ spin_unlock_irqrestore(&mvpwm->controller.lock, flags); ++} ++ ++static int mvebu_pwm_config(struct pwm_chip *chip, struct pwm_device *pwmd, ++ int duty_ns, int period_ns) ++{ ++ struct mvebu_pwm_chip_drv *chip_data = (struct mvebu_pwm_chip_drv*) pwmd->chip_data; ++ struct mvebu_pwmchip *controller = mvebu_pwm_list[chip_data->ctrl]; ++ unsigned int on, off; ++ unsigned long long val; ++ unsigned long flags; ++ ++ val = (unsigned long long) controller->clk_rate * duty_ns; ++ do_div(val, NSEC_PER_SEC); ++ if (val > UINT_MAX) ++ return -EINVAL; ++ if (val) ++ on = val; ++ else ++ on = 1; ++ ++ val = (unsigned long long) controller->clk_rate * (period_ns - duty_ns); ++ do_div(val, NSEC_PER_SEC); ++ if (val > UINT_MAX) ++ return -EINVAL; ++ if (val) ++ off = val; ++ else ++ off = 1; ++ ++ spin_lock_irqsave(&controller->lock, flags); ++ writel_relaxed(on, mvebu_pwmreg_blink_on_duration(controller)); ++ writel_relaxed(off, mvebu_pwmreg_blink_off_duration(controller)); ++ spin_unlock_irqrestore(&controller->lock, flags); ++ ++ return 0; ++} ++ ++static int mvebu_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm) ++{ ++ struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip); ++ struct mvebu_gpio_chip *mvchip = mvpwm->mvchip; ++ ++ mvebu_gpio_blink(&mvchip->chip, pwm->hwpwm, 1); ++ ++ return 0; ++} ++ ++static void mvebu_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm) ++{ ++ struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip); ++ struct mvebu_gpio_chip *mvchip = mvpwm->mvchip; ++ ++ mvebu_gpio_blink(&mvchip->chip, pwm->hwpwm, 0); ++} ++ ++static const struct pwm_ops mvebu_pwm_ops = { ++ .request = mvebu_pwm_request, ++ .free = mvebu_pwm_free, ++ .config = mvebu_pwm_config, ++ .enable = mvebu_pwm_enable, ++ .disable = mvebu_pwm_disable, ++ .owner = THIS_MODULE, ++}; ++ ++static void mvebu_pwm_suspend(struct mvebu_gpio_chip *mvchip) ++{ ++ struct mvebu_pwm *mvpwm = mvchip->mvpwm; ++ ++ mvpwm->blink_select = ++ readl_relaxed(mvebu_gpioreg_blink_select(mvchip)); ++ mvpwm->controller.blink_on_duration = ++ readl_relaxed(mvebu_pwmreg_blink_on_duration(&mvpwm->controller)); ++ mvpwm->controller.blink_off_duration = ++ readl_relaxed(mvebu_pwmreg_blink_off_duration(&mvpwm->controller)); ++} ++ ++static void mvebu_pwm_resume(struct mvebu_gpio_chip *mvchip) ++{ ++ struct mvebu_pwm *mvpwm = mvchip->mvpwm; ++ ++ writel_relaxed(mvpwm->blink_select, ++ mvebu_gpioreg_blink_select(mvchip)); ++ writel_relaxed(mvpwm->controller.blink_on_duration, ++ mvebu_pwmreg_blink_on_duration(&mvpwm->controller)); ++ writel_relaxed(mvpwm->controller.blink_off_duration, ++ mvebu_pwmreg_blink_off_duration(&mvpwm->controller)); ++} ++ ++/* ++ * Armada 370/XP has simple PWM support for gpio lines. Other SoCs ++ * don't have this hardware. So if we don't have the necessary ++ * resource, it is not an error. ++ */ ++static int mvebu_pwm_probe(struct platform_device *pdev, ++ struct mvebu_gpio_chip *mvchip, ++ int id) ++{ ++ struct device *dev = &pdev->dev; ++ struct mvebu_pwm *mvpwm; ++ struct resource *res; ++ u32 set; ++ enum mvebu_pwm_ctrl ctrl_set; ++ ++ if (!of_device_is_compatible(mvchip->chip.of_node, ++ "marvell,armada-370-gpio")) ++ return 0; ++ ++ if (IS_ERR(mvchip->clk)) ++ return PTR_ERR(mvchip->clk); ++ ++ /* ++ * There are only two sets of PWM configuration registers for ++ * all the GPIO lines on those SoCs which this driver reserves ++ * for the first two GPIO chips. So if the resource is missing ++ * we can't treat it as an error. ++ */ ++ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pwm"); ++ if (!res) ++ return 0; ++ ++ /* ++ * Use set A for lines of GPIO chip with id 0, B for GPIO chip ++ * with id 1. Don't allow further GPIO chips to be used for PWM. ++ */ ++ if (id == 0) { ++ set = 0; ++ ctrl_set = MVEBU_PWM_CTRL_SET_A; ++ } else if (id == 1) { ++ set = U32_MAX; ++ ctrl_set = MVEBU_PWM_CTRL_SET_B; ++ } else { ++ return -EINVAL; ++ } ++ writel_relaxed(set, mvebu_gpioreg_blink_select(mvchip)); ++ ++ mvpwm = devm_kzalloc(dev, sizeof(struct mvebu_pwm), GFP_KERNEL); ++ if (!mvpwm) ++ return -ENOMEM; ++ mvchip->mvpwm = mvpwm; ++ mvpwm->mvchip = mvchip; ++ ++ mvpwm->controller.membase = devm_ioremap_resource(dev, res); ++ if (IS_ERR(mvpwm->controller.membase)) ++ return PTR_ERR(mvpwm->controller.membase); ++ ++ mvpwm->controller.clk_rate = clk_get_rate(mvchip->clk); ++ if (!mvpwm->controller.clk_rate) ++ return -EINVAL; ++ ++ mvpwm->chip.dev = dev; ++ mvpwm->chip.ops = &mvebu_pwm_ops; ++ mvpwm->chip.npwm = mvchip->chip.ngpio; ++ ++ /* ++ * There may already be some PWM allocated, so we can't force ++ * mvpwm->chip.base to a fixed point like mvchip->chip.base. ++ * So, we let pwmchip_add() do the numbering and take the next free ++ * region. ++ */ ++ mvpwm->chip.base = -1; ++ ++ spin_lock_init(&mvpwm->controller.lock); ++ mvpwm->default_counter = ctrl_set; ++ mvebu_pwm_list[ctrl_set] = &mvpwm->controller; ++ ++ return pwmchip_add(&mvpwm->chip); ++} ++ + #ifdef CONFIG_DEBUG_FS + #include + +@@ -561,6 +889,10 @@ static const struct of_device_id mvebu_gpio_of_match[] = { + .data = (void *) MVEBU_GPIO_SOC_VARIANT_ARMADAXP, + }, + { ++ .compatible = "marvell,armada-370-gpio", ++ .data = (void *) MVEBU_GPIO_SOC_VARIANT_ORION, ++ }, ++ { + /* sentinel */ + }, + }; +@@ -607,6 +939,9 @@ static int mvebu_gpio_suspend(struct platform_device *pdev, pm_message_t state) + BUG(); + } + ++ if (IS_ENABLED(CONFIG_PWM)) ++ mvebu_pwm_suspend(mvchip); ++ + return 0; + } + +@@ -650,6 +985,9 @@ static int mvebu_gpio_resume(struct platform_device *pdev) + BUG(); + } + ++ if (IS_ENABLED(CONFIG_PWM)) ++ mvebu_pwm_resume(mvchip); ++ + return 0; + } + +@@ -661,7 +999,6 @@ static int mvebu_gpio_probe(struct platform_device *pdev) + struct resource *res; + struct irq_chip_generic *gc; + struct irq_chip_type *ct; +- struct clk *clk; + unsigned int ngpios; + unsigned int gpio_base = -1; + int soc_variant; +@@ -695,10 +1032,10 @@ static int mvebu_gpio_probe(struct platform_device *pdev) + return id; + } + +- clk = devm_clk_get(&pdev->dev, NULL); ++ mvchip->clk = devm_clk_get(&pdev->dev, NULL); + /* Not all SoCs require a clock.*/ +- if (!IS_ERR(clk)) +- clk_prepare_enable(clk); ++ if (!IS_ERR(mvchip->clk)) ++ clk_prepare_enable(mvchip->clk); + + mvchip->soc_variant = soc_variant; + mvchip->chip.label = dev_name(&pdev->dev); +@@ -835,6 +1172,10 @@ static int mvebu_gpio_probe(struct platform_device *pdev) + goto err_generic_chip; + } + ++ /* Armada 370/XP has simple PWM support for GPIO lines */ ++ if (IS_ENABLED(CONFIG_PWM)) ++ return mvebu_pwm_probe(pdev, mvchip, id); ++ + return 0; + + err_generic_chip: diff --git a/patch/kernel/mvebu-default/94-01-Enable-ATA-port-LED-trigger.patch b/patch/kernel/mvebu-default/94-01-Enable-ATA-port-LED-trigger.patch deleted file mode 100644 index 6cc27c187..000000000 --- a/patch/kernel/mvebu-default/94-01-Enable-ATA-port-LED-trigger.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 9ee6345ef82f7af5f98e17a40e667f8ad6b2fa1b Mon Sep 17 00:00:00 2001 -From: aprayoga -Date: Sun, 3 Sep 2017 18:10:12 +0800 -Subject: Enable ATA port LED trigger - ---- - arch/arm/configs/mvebu_v7_defconfig | 1 + - arch/arm/mach-mvebu/Kconfig | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig -index 053ea9d..aa1f389 100644 ---- a/arch/arm/mach-mvebu/Kconfig -+++ b/arch/arm/mach-mvebu/Kconfig -@@ -52,6 +52,7 @@ config MACH_ARMADA_375 - - config MACH_ARMADA_38X - bool "Marvell Armada 380/385 boards" if ARCH_MULTI_V7 -+ select ARCH_WANT_LIBATA_LEDS - select ARM_ERRATA_720789 - select ARM_ERRATA_753970 - select ARM_GIC --- -2.7.4 - diff --git a/patch/kernel/mvebu-default/94-01-libata-add-ledtrig-support.patch b/patch/kernel/mvebu-default/94-libata-add-ledtrig-support.patch similarity index 100% rename from patch/kernel/mvebu-default/94-01-libata-add-ledtrig-support.patch rename to patch/kernel/mvebu-default/94-libata-add-ledtrig-support.patch diff --git a/patch/kernel/mvebu-default/95-helios4-device-tree.patch b/patch/kernel/mvebu-default/95-helios4-device-tree.patch index fbbc6c2c6..c36487654 100644 --- a/patch/kernel/mvebu-default/95-helios4-device-tree.patch +++ b/patch/kernel/mvebu-default/95-helios4-device-tree.patch @@ -1,27 +1,9 @@ -From 9fe4b82ed5e62ac82df8294e9e02b4ffab23bb47 Mon Sep 17 00:00:00 2001 -From: Aditya Prayoga -Date: Sun, 19 Mar 2017 17:27:01 +0800 -Subject: Initial device tree - -- Tested using clearfrog u-boot -- Increase SD Card clock to 50 MHz from default 25 MHz -- All 7 LED declared as led-gpio -- LED1 (system) default to hearbeat -- LED7 (USB) triggered by USB Host activity -- SPI NOR flash declared as MTD -- Enable IO expander interrupt -- Allocate GPIOs for fans ---- - arch/arm/boot/dts/armada-388-helios4.dts | 333 +++++++++++++++++++++ - 1 file changed, 329 insertions(+) - create mode 100644 arch/arm/boot/dts/armada-388-helios4.dts - diff --git a/arch/arm/boot/dts/armada-388-helios4.dts b/arch/arm/boot/dts/armada-388-helios4.dts new file mode 100644 index 0000000..19a0256 --- /dev/null +++ b/arch/arm/boot/dts/armada-388-helios4.dts -@@ -0,0 +1,318 @@ +@@ -0,0 +1,314 @@ +/* + * Device Tree file for Helios4 + * based on SolidRun Clearfog revision A1 rev 2.0 (88F6828) @@ -142,17 +124,13 @@ index 0000000..19a0256 + }; + + fan1: j10-pwm { -+ compatible = "gpio-fan"; -+ gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; -+ gpio-fan,speed-map = < 0 0 -+ 3800 1>; ++ compatible = "pwm-fan"; ++ pwms = <&gpio1 9 40000>; /* Target freq:25 kHz */ + }; + + fan2: j17-pwm { -+ compatible = "gpio-fan"; -+ gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>; -+ gpio-fan,speed-map = < 0 0 -+ 3800 1>; ++ compatible = "pwm-fan"; ++ pwms = <&gpio1 23 40000>; /* Target freq:25 kHz */ + }; + + usb2_phy: usb2-phy { diff --git a/patch/kernel/mvebu-next/91-02-Enable-ATA-port-LED-trigger.patch b/patch/kernel/mvebu-next/91-02-Enable-ATA-port-LED-trigger.patch deleted file mode 100644 index 472d9b994..000000000 --- a/patch/kernel/mvebu-next/91-02-Enable-ATA-port-LED-trigger.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 9ee6345ef82f7af5f98e17a40e667f8ad6b2fa1b Mon Sep 17 00:00:00 2001 -From: aprayoga -Date: Sun, 3 Sep 2017 18:10:12 +0800 -Subject: Enable ATA port LED trigger - ---- - arch/arm/configs/mvebu_v7_defconfig | 1 + - arch/arm/mach-mvebu/Kconfig | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/arch/arm/configs/mvebu_v7_defconfig b/arch/arm/configs/mvebu_v7_defconfig -index cf363ab..19449d3 100644 ---- a/arch/arm/configs/mvebu_v7_defconfig -+++ b/arch/arm/configs/mvebu_v7_defconfig -@@ -61,6 +61,7 @@ CONFIG_MTD_SPI_NOR=y - CONFIG_EEPROM_AT24=y - CONFIG_BLK_DEV_SD=y - CONFIG_ATA=y -+CONFIG_ATA_LEDS=y - CONFIG_SATA_AHCI=y - CONFIG_AHCI_MVEBU=y - CONFIG_SATA_MV=y -diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig -index 053ea9d..aa1f389 100644 ---- a/arch/arm/mach-mvebu/Kconfig -+++ b/arch/arm/mach-mvebu/Kconfig -@@ -57,6 +57,7 @@ config MACH_ARMADA_375 - config MACH_ARMADA_38X - bool "Marvell Armada 380/385 boards" - depends on ARCH_MULTI_V7 -+ select ARCH_WANT_LIBATA_LEDS - select ARM_ERRATA_720789 - select ARM_ERRATA_753970 - select ARM_GIC --- -2.7.4 - diff --git a/patch/kernel/mvebu-next/91-01-libata-add-ledtrig-support.patch b/patch/kernel/mvebu-next/91-libata-add-ledtrig-support.patch similarity index 100% rename from patch/kernel/mvebu-next/91-01-libata-add-ledtrig-support.patch rename to patch/kernel/mvebu-next/91-libata-add-ledtrig-support.patch diff --git a/patch/kernel/mvebu-next/93-helios4-device-tree.patch b/patch/kernel/mvebu-next/93-helios4-device-tree.patch index ff18c48d8..7d724eebc 100644 --- a/patch/kernel/mvebu-next/93-helios4-device-tree.patch +++ b/patch/kernel/mvebu-next/93-helios4-device-tree.patch @@ -1,7 +1,3 @@ - arch/arm/boot/dts/Makefile | 1 + - arch/arm/boot/dts/armada-388-helios4.dts | 309 +++++++++++++++++++++ - 2 files changed, 310 insertions(+) - diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 4b17f35..c6b6038 100644 --- a/arch/arm/boot/dts/Makefile @@ -14,12 +10,13 @@ index 4b17f35..c6b6038 100644 armada-388-db.dtb \ armada-388-gp.dtb \ armada-388-rd.dtb + diff --git a/arch/arm/boot/dts/armada-388-helios4.dts b/arch/arm/boot/dts/armada-388-helios4.dts new file mode 100644 index 0000000..93d0132 --- /dev/null +++ b/arch/arm/boot/dts/armada-388-helios4.dts -@@ -0,0 +1,309 @@ +@@ -0,0 +1,295 @@ +/* + * Device Tree file for Helios4 + * based on SolidRun Clearfog revision A1 rev 2.0 (88F6828) @@ -199,11 +196,6 @@ index 0000000..93d0132 + status = "okay"; + vmmc = <®_3p3v>; + wp-inverted; -+ max-frequency = <50000000>; -+ cap-sd-highspeed; -+ sd-uhs-sdr12; -+ sd-uhs-sdr25; -+ sd-uhs-sdr50; + }; + + usb@58000 { @@ -320,12 +312,3 @@ index 0000000..93d0132 + marvell,function = "gpio"; + }; +}; -+ -+&spi1 { -+ status = "okay"; -+ -+ spi-flash@0 { -+ spi-max-frequency = <104000000>; -+ status = "okay"; -+ }; -+}; diff --git a/patch/kernel/mvebu-next/93-helios4-remove-spi-nor-flash.patch b/patch/kernel/mvebu-next/93-helios4-remove-spi-nor-flash.patch deleted file mode 100644 index eec08df38..000000000 --- a/patch/kernel/mvebu-next/93-helios4-remove-spi-nor-flash.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/arch/arm/boot/dts/armada-388-helios4.dts b/arch/arm/boot/dts/armada-388-helios4.dts -index 93d0132..47699bd 100644 ---- a/arch/arm/boot/dts/armada-388-helios4.dts -+++ b/arch/arm/boot/dts/armada-388-helios4.dts -@@ -298,12 +298,3 @@ - marvell,function = "gpio"; - }; - }; -- --&spi1 { -- status = "okay"; -- -- spi-flash@0 { -- spi-max-frequency = <104000000>; -- status = "okay"; -- }; --}; diff --git a/patch/kernel/mvebu-next/93-helios4-remove_sd_uhs_option.patch b/patch/kernel/mvebu-next/93-helios4-remove_sd_uhs_option.patch deleted file mode 100644 index 08e364d4a..000000000 --- a/patch/kernel/mvebu-next/93-helios4-remove_sd_uhs_option.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/arch/arm/boot/dts/armada-388-helios4.dts b/arch/arm/boot/dts/armada-388-helios4.dts -index 47699bd..4a5e8fc 100644 ---- a/arch/arm/boot/dts/armada-388-helios4.dts -+++ b/arch/arm/boot/dts/armada-388-helios4.dts -@@ -177,11 +177,6 @@ - status = "okay"; - vmmc = <®_3p3v>; - wp-inverted; -- max-frequency = <50000000>; -- cap-sd-highspeed; -- sd-uhs-sdr12; -- sd-uhs-sdr25; -- sd-uhs-sdr50; - }; - - usb@58000 {