oxnas: add testing support for Linux 5.15
Rebase patches and port SATA driver to work with Linux > 5.13. Tested on Shuttle KD-20. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
This commit is contained in:
		| @@ -8,6 +8,7 @@ FEATURES:=gpio ramdisk rtc squashfs | |||||||
| DEVICE_TYPE:=nas | DEVICE_TYPE:=nas | ||||||
|  |  | ||||||
| KERNEL_PATCHVER:=5.10 | KERNEL_PATCHVER:=5.10 | ||||||
|  | KERNEL_TESTING_PATCHVER:=5.15 | ||||||
|  |  | ||||||
| include $(INCLUDE_DIR)/target.mk | include $(INCLUDE_DIR)/target.mk | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										289
									
								
								target/linux/oxnas/config-5.15
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										289
									
								
								target/linux/oxnas/config-5.15
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,289 @@ | |||||||
|  | CONFIG_ALIGNMENT_TRAP=y | ||||||
|  | CONFIG_ARCH_32BIT_OFF_T=y | ||||||
|  | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||||||
|  | CONFIG_ARCH_KEEP_MEMBLOCK=y | ||||||
|  | CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y | ||||||
|  | CONFIG_ARCH_MULTIPLATFORM=y | ||||||
|  | CONFIG_ARCH_MULTI_CPU_AUTO=y | ||||||
|  | # CONFIG_ARCH_MULTI_V4 is not set | ||||||
|  | # CONFIG_ARCH_MULTI_V4T is not set | ||||||
|  | CONFIG_ARCH_MULTI_V4_V5=y | ||||||
|  | CONFIG_ARCH_MULTI_V5=y | ||||||
|  | CONFIG_ARCH_NR_GPIO=0 | ||||||
|  | CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y | ||||||
|  | CONFIG_ARCH_OXNAS=y | ||||||
|  | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||||||
|  | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||||||
|  | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||||||
|  | CONFIG_ARCH_WANT_LIBATA_LEDS=y | ||||||
|  | CONFIG_ARM=y | ||||||
|  | CONFIG_ARM_APPENDED_DTB=y | ||||||
|  | CONFIG_ARM_ATAG_DTB_COMPAT=y | ||||||
|  | # CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_FROM_BOOTLOADER is not set | ||||||
|  | CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE=y | ||||||
|  | CONFIG_ARM_CPU_SUSPEND=y | ||||||
|  | CONFIG_ARM_HAS_SG_CHAIN=y | ||||||
|  | CONFIG_ARM_L1_CACHE_SHIFT=5 | ||||||
|  | CONFIG_ARM_PATCH_PHYS_VIRT=y | ||||||
|  | # CONFIG_ARM_SMMU is not set | ||||||
|  | CONFIG_ARM_THUMB=y | ||||||
|  | CONFIG_ARM_UNWIND=y | ||||||
|  | CONFIG_ATAGS=y | ||||||
|  | CONFIG_AUTO_ZRELADDR=y | ||||||
|  | CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y | ||||||
|  | CONFIG_BLK_DEBUG_FS=y | ||||||
|  | CONFIG_BLK_DEV_LOOP=y | ||||||
|  | CONFIG_BLK_DEV_RAM=y | ||||||
|  | CONFIG_BLK_DEV_RAM_COUNT=16 | ||||||
|  | CONFIG_BLK_DEV_RAM_SIZE=65536 | ||||||
|  | CONFIG_BLK_PM=y | ||||||
|  | CONFIG_CLKSRC_MMIO=y | ||||||
|  | CONFIG_CLONE_BACKWARDS=y | ||||||
|  | CONFIG_CMA=y | ||||||
|  | CONFIG_CMA_ALIGNMENT=8 | ||||||
|  | CONFIG_CMA_AREAS=7 | ||||||
|  | # CONFIG_CMA_DEBUG is not set | ||||||
|  | # CONFIG_CMA_DEBUGFS is not set | ||||||
|  | CONFIG_CMA_SIZE_MBYTES=64 | ||||||
|  | # 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_CMDLINE_PARTITION=y | ||||||
|  | CONFIG_COMMON_CLK=y | ||||||
|  | CONFIG_COMMON_CLK_OXNAS=y | ||||||
|  | CONFIG_COMPAT_32BIT_TIME=y | ||||||
|  | CONFIG_CONTIG_ALLOC=y | ||||||
|  | CONFIG_COREDUMP=y | ||||||
|  | CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y | ||||||
|  | CONFIG_CPU_32v5=y | ||||||
|  | CONFIG_CPU_ABRT_EV5TJ=y | ||||||
|  | CONFIG_CPU_ARM926T=y | ||||||
|  | # CONFIG_CPU_CACHE_ROUND_ROBIN is not set | ||||||
|  | CONFIG_CPU_CACHE_VIVT=y | ||||||
|  | CONFIG_CPU_COPY_V4WB=y | ||||||
|  | CONFIG_CPU_CP15=y | ||||||
|  | CONFIG_CPU_CP15_MMU=y | ||||||
|  | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||||||
|  | CONFIG_CPU_PABRT_LEGACY=y | ||||||
|  | CONFIG_CPU_PM=y | ||||||
|  | CONFIG_CPU_THUMB_CAPABLE=y | ||||||
|  | CONFIG_CPU_TLB_V4WBI=y | ||||||
|  | CONFIG_CPU_USE_DOMAINS=y | ||||||
|  | CONFIG_CRASH_CORE=y | ||||||
|  | CONFIG_CRC16=y | ||||||
|  | # CONFIG_CRC32_SARWATE is not set | ||||||
|  | CONFIG_CRC32_SLICEBY8=y | ||||||
|  | CONFIG_CROSS_MEMORY_ATTACH=y | ||||||
|  | CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y | ||||||
|  | CONFIG_CRYPTO_RNG2=y | ||||||
|  | CONFIG_DEBUG_ALIGN_RODATA=y | ||||||
|  | CONFIG_DEBUG_BUGVERBOSE=y | ||||||
|  | CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" | ||||||
|  | CONFIG_DECOMPRESS_BZIP2=y | ||||||
|  | CONFIG_DECOMPRESS_GZIP=y | ||||||
|  | CONFIG_DECOMPRESS_LZ4=y | ||||||
|  | CONFIG_DECOMPRESS_LZMA=y | ||||||
|  | CONFIG_DECOMPRESS_LZO=y | ||||||
|  | CONFIG_DECOMPRESS_XZ=y | ||||||
|  | CONFIG_DMA_CMA=y | ||||||
|  | CONFIG_DMA_OPS=y | ||||||
|  | CONFIG_DMA_REMAP=y | ||||||
|  | CONFIG_DNOTIFY=y | ||||||
|  | CONFIG_DTC=y | ||||||
|  | CONFIG_DWMAC_GENERIC=y | ||||||
|  | CONFIG_DWMAC_OXNAS=y | ||||||
|  | CONFIG_EDAC_ATOMIC_SCRUB=y | ||||||
|  | CONFIG_EDAC_SUPPORT=y | ||||||
|  | CONFIG_ELF_CORE=y | ||||||
|  | CONFIG_FAT_FS=y | ||||||
|  | CONFIG_FIXED_PHY=y | ||||||
|  | CONFIG_FIX_EARLYCON_MEM=y | ||||||
|  | CONFIG_FREEZER=y | ||||||
|  | CONFIG_FWNODE_MDIO=y | ||||||
|  | # CONFIG_FW_CACHE is not set | ||||||
|  | CONFIG_FW_LOADER_PAGED_BUF=y | ||||||
|  | CONFIG_GENERIC_ALLOCATOR=y | ||||||
|  | CONFIG_GENERIC_ATOMIC64=y | ||||||
|  | CONFIG_GENERIC_BUG=y | ||||||
|  | CONFIG_GENERIC_CLOCKEVENTS=y | ||||||
|  | CONFIG_GENERIC_CPU_AUTOPROBE=y | ||||||
|  | CONFIG_GENERIC_EARLY_IOREMAP=y | ||||||
|  | CONFIG_GENERIC_IDLE_POLL_SETUP=y | ||||||
|  | CONFIG_GENERIC_IRQ_MULTI_HANDLER=y | ||||||
|  | CONFIG_GENERIC_IRQ_SHOW=y | ||||||
|  | CONFIG_GENERIC_IRQ_SHOW_LEVEL=y | ||||||
|  | CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=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_GPIOLIB_IRQCHIP=y | ||||||
|  | CONFIG_GPIO_CDEV=y | ||||||
|  | CONFIG_GPIO_GENERIC=y | ||||||
|  | CONFIG_GPIO_GENERIC_PLATFORM=y | ||||||
|  | CONFIG_HANDLE_DOMAIN_IRQ=y | ||||||
|  | CONFIG_HARDIRQS_SW_RESEND=y | ||||||
|  | CONFIG_HAS_DMA=y | ||||||
|  | CONFIG_HAS_IOMEM=y | ||||||
|  | CONFIG_HAS_IOPORT_MAP=y | ||||||
|  | CONFIG_HID=y | ||||||
|  | CONFIG_HID_GENERIC=y | ||||||
|  | CONFIG_HWMON=y | ||||||
|  | CONFIG_HZ_FIXED=0 | ||||||
|  | CONFIG_ICPLUS_PHY=y | ||||||
|  | CONFIG_INET_DIAG=y | ||||||
|  | # CONFIG_INET_DIAG_DESTROY is not set | ||||||
|  | # CONFIG_INET_RAW_DIAG is not set | ||||||
|  | CONFIG_INET_TCP_DIAG=y | ||||||
|  | CONFIG_INITRAMFS_SOURCE="" | ||||||
|  | CONFIG_INPUT=y | ||||||
|  | # CONFIG_IOMMU_DEBUGFS is not set | ||||||
|  | # CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set | ||||||
|  | # CONFIG_IOMMU_IO_PGTABLE_LPAE is not set | ||||||
|  | CONFIG_IOMMU_SUPPORT=y | ||||||
|  | CONFIG_IRQCHIP=y | ||||||
|  | CONFIG_IRQ_DOMAIN=y | ||||||
|  | CONFIG_IRQ_FORCED_THREADING=y | ||||||
|  | CONFIG_IRQ_WORK=y | ||||||
|  | # CONFIG_ISDN is not set | ||||||
|  | # CONFIG_JFFS2_FS is not set | ||||||
|  | CONFIG_KALLSYMS=y | ||||||
|  | CONFIG_KERNEL_GZIP=y | ||||||
|  | # CONFIG_KERNEL_XZ is not set | ||||||
|  | CONFIG_KEXEC=y | ||||||
|  | CONFIG_KEXEC_CORE=y | ||||||
|  | # CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set | ||||||
|  | CONFIG_LEDS_GPIO=y | ||||||
|  | CONFIG_LEDS_TRIGGER_CPU=y | ||||||
|  | CONFIG_LEDS_TRIGGER_GPIO=y | ||||||
|  | CONFIG_LEDS_TRIGGER_ONESHOT=y | ||||||
|  | CONFIG_LIBFDT=y | ||||||
|  | CONFIG_LOCALVERSION_AUTO=y | ||||||
|  | CONFIG_LOCK_DEBUGGING_SUPPORT=y | ||||||
|  | CONFIG_LZ4_DECOMPRESS=y | ||||||
|  | CONFIG_LZO_DECOMPRESS=y | ||||||
|  | # CONFIG_MACH_OX810SE is not set | ||||||
|  | CONFIG_MDIO_BUS=y | ||||||
|  | CONFIG_MDIO_DEVICE=y | ||||||
|  | CONFIG_MDIO_DEVRES=y | ||||||
|  | CONFIG_MEMFD_CREATE=y | ||||||
|  | CONFIG_MEMORY_ISOLATION=y | ||||||
|  | CONFIG_MFD_SYSCON=y | ||||||
|  | CONFIG_MIGRATION=y | ||||||
|  | CONFIG_MODULES_USE_ELF_REL=y | ||||||
|  | CONFIG_NEED_DMA_MAP_STATE=y | ||||||
|  | CONFIG_NEED_KUSER_HELPERS=y | ||||||
|  | CONFIG_NEED_PER_CPU_KM=y | ||||||
|  | CONFIG_NET_PTP_CLASSIFY=y | ||||||
|  | CONFIG_NET_SELFTESTS=y | ||||||
|  | CONFIG_NLS=y | ||||||
|  | CONFIG_NO_HZ=y | ||||||
|  | CONFIG_NO_HZ_COMMON=y | ||||||
|  | CONFIG_NO_HZ_IDLE=y | ||||||
|  | CONFIG_OF=y | ||||||
|  | CONFIG_OF_ADDRESS=y | ||||||
|  | CONFIG_OF_EARLY_FLATTREE=y | ||||||
|  | CONFIG_OF_FLATTREE=y | ||||||
|  | CONFIG_OF_GPIO=y | ||||||
|  | CONFIG_OF_IRQ=y | ||||||
|  | CONFIG_OF_KOBJ=y | ||||||
|  | CONFIG_OF_MDIO=y | ||||||
|  | CONFIG_OLD_SIGACTION=y | ||||||
|  | CONFIG_OLD_SIGSUSPEND3=y | ||||||
|  | CONFIG_OXNAS_RPS_TIMER=y | ||||||
|  | CONFIG_PAGE_OFFSET=0xC0000000 | ||||||
|  | CONFIG_PAGE_POOL=y | ||||||
|  | # CONFIG_PANIC_ON_OOPS is not set | ||||||
|  | CONFIG_PANIC_ON_OOPS_VALUE=0 | ||||||
|  | CONFIG_PANIC_TIMEOUT=0 | ||||||
|  | CONFIG_PCS_XPCS=y | ||||||
|  | CONFIG_PERF_USE_VMALLOC=y | ||||||
|  | CONFIG_PGTABLE_LEVELS=2 | ||||||
|  | CONFIG_PHYLIB=y | ||||||
|  | CONFIG_PHYLINK=y | ||||||
|  | CONFIG_PHY_OXNAS=y | ||||||
|  | CONFIG_PINCTRL=y | ||||||
|  | CONFIG_PINCTRL_OXNAS=y | ||||||
|  | # CONFIG_PINCTRL_SINGLE is not set | ||||||
|  | CONFIG_PM=y | ||||||
|  | CONFIG_PM_CLK=y | ||||||
|  | CONFIG_PM_SLEEP=y | ||||||
|  | CONFIG_POWER_RESET=y | ||||||
|  | CONFIG_POWER_RESET_OXNAS=y | ||||||
|  | CONFIG_PPS=y | ||||||
|  | CONFIG_PTP_1588_CLOCK=y | ||||||
|  | CONFIG_PTP_1588_CLOCK_OPTIONAL=y | ||||||
|  | CONFIG_RAS=y | ||||||
|  | CONFIG_RATIONAL=y | ||||||
|  | CONFIG_RCU_TRACE=y | ||||||
|  | CONFIG_RD_BZIP2=y | ||||||
|  | CONFIG_RD_GZIP=y | ||||||
|  | CONFIG_RD_LZ4=y | ||||||
|  | CONFIG_RD_LZMA=y | ||||||
|  | CONFIG_RD_LZO=y | ||||||
|  | CONFIG_RD_XZ=y | ||||||
|  | CONFIG_REALTEK_PHY=y | ||||||
|  | CONFIG_REGMAP=y | ||||||
|  | CONFIG_REGMAP_MMIO=y | ||||||
|  | CONFIG_RESET_CONTROLLER=y | ||||||
|  | CONFIG_RESET_OXNAS=y | ||||||
|  | CONFIG_SCHED_DEBUG=y | ||||||
|  | CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y | ||||||
|  | CONFIG_SERIAL_8250_FSL=y | ||||||
|  | CONFIG_SERIAL_8250_NR_UARTS=4 | ||||||
|  | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||||||
|  | CONFIG_SERIAL_MCTRL_GPIO=y | ||||||
|  | CONFIG_SERIAL_OF_PLATFORM=y | ||||||
|  | CONFIG_SERIO=y | ||||||
|  | CONFIG_SERIO_LIBPS2=y | ||||||
|  | CONFIG_SERIO_SERPORT=y | ||||||
|  | CONFIG_SLUB_DEBUG=y | ||||||
|  | CONFIG_SOCK_DIAG=y | ||||||
|  | CONFIG_SPARSE_IRQ=y | ||||||
|  | CONFIG_SPLIT_PTLOCK_CPUS=999999 | ||||||
|  | CONFIG_SRCU=y | ||||||
|  | CONFIG_STACKTRACE=y | ||||||
|  | CONFIG_STMMAC_ETH=y | ||||||
|  | CONFIG_STMMAC_PLATFORM=y | ||||||
|  | # CONFIG_STRIP_ASM_SYMS is not set | ||||||
|  | CONFIG_SUSPEND=y | ||||||
|  | CONFIG_SUSPEND_FREEZER=y | ||||||
|  | CONFIG_SWPHY=y | ||||||
|  | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||||||
|  | CONFIG_THERMAL=y | ||||||
|  | CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y | ||||||
|  | CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 | ||||||
|  | CONFIG_THERMAL_GOV_STEP_WISE=y | ||||||
|  | CONFIG_THERMAL_HWMON=y | ||||||
|  | CONFIG_THERMAL_OF=y | ||||||
|  | CONFIG_TICK_CPU_ACCOUNTING=y | ||||||
|  | CONFIG_TIMER_OF=y | ||||||
|  | CONFIG_TIMER_PROBE=y | ||||||
|  | CONFIG_TINY_SRCU=y | ||||||
|  | CONFIG_TRACE_CLOCK=y | ||||||
|  | CONFIG_UEVENT_HELPER_PATH="" | ||||||
|  | CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" | ||||||
|  | CONFIG_UNWINDER_ARM=y | ||||||
|  | CONFIG_USB_SUPPORT=y | ||||||
|  | CONFIG_USE_OF=y | ||||||
|  | CONFIG_VERSATILE_FPGA_IRQ=y | ||||||
|  | CONFIG_VERSATILE_FPGA_IRQ_NR=4 | ||||||
|  | CONFIG_VFAT_FS=y | ||||||
|  | # CONFIG_VFP is not set | ||||||
|  | CONFIG_VM_EVENT_COUNTERS=y | ||||||
|  | # CONFIG_WATCHDOG is not set | ||||||
|  | # CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set | ||||||
|  | CONFIG_XZ_DEC_ARM=y | ||||||
|  | CONFIG_XZ_DEC_BCJ=y | ||||||
|  | CONFIG_XZ_DEC_IA64=y | ||||||
|  | CONFIG_XZ_DEC_POWERPC=y | ||||||
|  | CONFIG_XZ_DEC_SPARC=y | ||||||
|  | CONFIG_XZ_DEC_X86=y | ||||||
|  | CONFIG_ZBOOT_ROM_BSS=0 | ||||||
|  | CONFIG_ZBOOT_ROM_TEXT=0 | ||||||
|  | CONFIG_ZLIB_INFLATE=y | ||||||
| @@ -31,6 +31,7 @@ | |||||||
|  |  | ||||||
| #include <linux/io.h> | #include <linux/io.h> | ||||||
| #include <linux/sizes.h> | #include <linux/sizes.h> | ||||||
|  | #include <linux/version.h> | ||||||
|  |  | ||||||
| static inline void oxnas_register_clear_mask(void __iomem *p, unsigned mask) | static inline void oxnas_register_clear_mask(void __iomem *p, unsigned mask) | ||||||
| { | { | ||||||
| @@ -2231,7 +2232,9 @@ static struct scsi_host_template sata_oxnas_sht = { | |||||||
| 	.can_queue = SATA_OXNAS_QUEUE_DEPTH, | 	.can_queue = SATA_OXNAS_QUEUE_DEPTH, | ||||||
| 	.sg_tablesize = SATA_OXNAS_MAX_PRD, | 	.sg_tablesize = SATA_OXNAS_MAX_PRD, | ||||||
| 	.dma_boundary = ATA_DMA_BOUNDARY, | 	.dma_boundary = ATA_DMA_BOUNDARY, | ||||||
|  | #if LINUX_VERSION_CODE < KERNEL_VERSION(5, 13, 0) | ||||||
| 	.unchecked_isa_dma  = 0, | 	.unchecked_isa_dma  = 0, | ||||||
|  | #endif | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -52,7 +52,11 @@ CONFIG_MIGHT_HAVE_PCI=y | |||||||
| CONFIG_MTD_CMDLINE_PARTS=y | CONFIG_MTD_CMDLINE_PARTS=y | ||||||
| # CONFIG_MTD_COMPLEX_MAPPINGS is not set | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||||||
| CONFIG_MTD_NAND=y | CONFIG_MTD_NAND=y | ||||||
|  | CONFIG_MTD_NAND_CORE=y | ||||||
| CONFIG_MTD_NAND_ECC=y | CONFIG_MTD_NAND_ECC=y | ||||||
|  | # CONFIG_MTD_NAND_ECC_SW_BCH is not set | ||||||
|  | CONFIG_MTD_NAND_ECC_SW_HAMMING=y | ||||||
|  | # CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC is not set | ||||||
| CONFIG_MTD_NAND_OXNAS=y | CONFIG_MTD_NAND_OXNAS=y | ||||||
| CONFIG_MTD_RAW_NAND=y | CONFIG_MTD_RAW_NAND=y | ||||||
| CONFIG_MTD_UBI=y | CONFIG_MTD_UBI=y | ||||||
|   | |||||||
							
								
								
									
										82
									
								
								target/linux/oxnas/patches-5.15/010-pogoplug-series-3.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								target/linux/oxnas/patches-5.15/010-pogoplug-series-3.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | |||||||
|  | - add compatible string | ||||||
|  | - add console to bootargs | ||||||
|  | - add led aliases | ||||||
|  | - adjust nand partition table | ||||||
|  | --- | ||||||
|  | --- a/arch/arm/boot/dts/ox820-cloudengines-pogoplug-series-3.dts | ||||||
|  | +++ b/arch/arm/boot/dts/ox820-cloudengines-pogoplug-series-3.dts | ||||||
|  | @@ -11,10 +11,10 @@ | ||||||
|  |  / { | ||||||
|  |  	model = "Cloud Engines PogoPlug Series 3"; | ||||||
|  |   | ||||||
|  | -	compatible = "cloudengines,pogoplugv3", "oxsemi,ox820"; | ||||||
|  | +	compatible = "cloudengines,pogoplug-series-3", "cloudengines,pogoplugv3", "oxsemi,ox820"; | ||||||
|  |   | ||||||
|  |  	chosen { | ||||||
|  | -		bootargs = "earlyprintk"; | ||||||
|  | +		bootargs = "earlyprintk console=ttyS0,115200"; | ||||||
|  |  		stdout-path = "serial0:115200n8"; | ||||||
|  |  	}; | ||||||
|  |   | ||||||
|  | @@ -27,24 +27,28 @@ | ||||||
|  |  		serial0 = &uart0; | ||||||
|  |  		gpio0 = &gpio0; | ||||||
|  |  		gpio1 = &gpio1; | ||||||
|  | +		led-boot = &led_status; | ||||||
|  | +		led-failsafe = &led_warn; | ||||||
|  | +		led-running = &led_act; | ||||||
|  | +		led-upgrade = &led_warn; | ||||||
|  |  	}; | ||||||
|  |   | ||||||
|  |  	leds { | ||||||
|  |  		compatible = "gpio-leds"; | ||||||
|  |   | ||||||
|  | -		blue { | ||||||
|  | +		led_status: blue { | ||||||
|  |  			label = "pogoplug:blue"; | ||||||
|  |  			gpios = <&gpio0 2 0>; | ||||||
|  |  			default-state = "keep"; | ||||||
|  |  		}; | ||||||
|  |   | ||||||
|  | -		orange { | ||||||
|  | +		led_warn: orange { | ||||||
|  |  			label = "pogoplug:orange"; | ||||||
|  |  			gpios = <&gpio1 16 1>; | ||||||
|  |  			default-state = "keep"; | ||||||
|  |  		}; | ||||||
|  |   | ||||||
|  | -		green { | ||||||
|  | +		led_act: green { | ||||||
|  |  			label = "pogoplug:green"; | ||||||
|  |  			gpios = <&gpio1 17 1>; | ||||||
|  |  			default-state = "keep"; | ||||||
|  | @@ -73,11 +77,27 @@ | ||||||
|  |  		nand-ecc-algo = "hamming"; | ||||||
|  |   | ||||||
|  |  		partition@0 { | ||||||
|  | -			label = "boot"; | ||||||
|  | -			reg = <0x00000000 0x00e00000>; | ||||||
|  | +			label = "stage1"; | ||||||
|  | +			reg = <0x00000000 0x00040000>; | ||||||
|  |  			read-only; | ||||||
|  |  		}; | ||||||
|  |   | ||||||
|  | +		partition@40000 { | ||||||
|  | +			label = "u-boot"; | ||||||
|  | +			reg = <0x00040000 0x00380000>; | ||||||
|  | +			read-only; | ||||||
|  | +		}; | ||||||
|  | + | ||||||
|  | +		partition@3c0000 { | ||||||
|  | +			label = "u-boot-env"; | ||||||
|  | +			reg = <0x003c0000 0x00080000>; | ||||||
|  | +		}; | ||||||
|  | + | ||||||
|  | +		partition@440000 { | ||||||
|  | +			label = "kernel"; | ||||||
|  | +			reg = <0x00440000 0x009c0000>; | ||||||
|  | +		}; | ||||||
|  | + | ||||||
|  |  		partition@e00000 { | ||||||
|  |  			label = "ubi"; | ||||||
|  |  			reg = <0x00e00000 0x07200000>; | ||||||
| @@ -0,0 +1,63 @@ | |||||||
|  | From 552ed4955c1fee1109bf5ba137dc35a411a1448c Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Golle <daniel@makrotopia.org> | ||||||
|  | Date: Fri, 1 Jun 2018 02:41:15 +0200 | ||||||
|  | Subject: [PATCH] arm: ox820: remove left-overs | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Golle <daniel@makrotopia.org> | ||||||
|  | --- | ||||||
|  |  drivers/clk/clk-oxnas.c                  |  2 -- | ||||||
|  |  include/dt-bindings/clock/oxsemi,ox820.h | 32 +++++++++++------------- | ||||||
|  |  2 files changed, 14 insertions(+), 20 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/clk/clk-oxnas.c | ||||||
|  | +++ b/drivers/clk/clk-oxnas.c | ||||||
|  | @@ -29,8 +29,6 @@ struct oxnas_stdclk_data { | ||||||
|  |  	struct clk_hw_onecell_data *onecell_data; | ||||||
|  |  	struct clk_oxnas_gate **gates; | ||||||
|  |  	unsigned int ngates; | ||||||
|  | -	struct clk_oxnas_pll **plls; | ||||||
|  | -	unsigned int nplls; | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  /* Regmap offsets */ | ||||||
|  | --- a/include/dt-bindings/clock/oxsemi,ox820.h | ||||||
|  | +++ b/include/dt-bindings/clock/oxsemi,ox820.h | ||||||
|  | @@ -6,24 +6,20 @@ | ||||||
|  |  #ifndef DT_CLOCK_OXSEMI_OX820_H | ||||||
|  |  #define DT_CLOCK_OXSEMI_OX820_H | ||||||
|  |   | ||||||
|  | -/* PLLs */ | ||||||
|  | -#define CLK_820_PLLA		0 | ||||||
|  | -#define CLK_820_PLLB		1 | ||||||
|  | - | ||||||
|  |  /* Gate Clocks */ | ||||||
|  | -#define CLK_820_LEON		2 | ||||||
|  | -#define CLK_820_DMA_SGDMA	3 | ||||||
|  | -#define CLK_820_CIPHER		4 | ||||||
|  | -#define CLK_820_SD		5 | ||||||
|  | -#define CLK_820_SATA		6 | ||||||
|  | -#define CLK_820_AUDIO		7 | ||||||
|  | -#define CLK_820_USBMPH		8 | ||||||
|  | -#define CLK_820_ETHA		9 | ||||||
|  | -#define CLK_820_PCIEA		10 | ||||||
|  | -#define CLK_820_NAND		11 | ||||||
|  | -#define CLK_820_PCIEB		12 | ||||||
|  | -#define CLK_820_ETHB		13 | ||||||
|  | -#define CLK_820_REF600		14 | ||||||
|  | -#define CLK_820_USBDEV		15 | ||||||
|  | +#define CLK_820_LEON		0 | ||||||
|  | +#define CLK_820_DMA_SGDMA	1 | ||||||
|  | +#define CLK_820_CIPHER		2 | ||||||
|  | +#define CLK_820_SD		3 | ||||||
|  | +#define CLK_820_SATA		4 | ||||||
|  | +#define CLK_820_AUDIO		5 | ||||||
|  | +#define CLK_820_USBMPH		6 | ||||||
|  | +#define CLK_820_ETHA		7 | ||||||
|  | +#define CLK_820_PCIEA		8 | ||||||
|  | +#define CLK_820_NAND		9 | ||||||
|  | +#define CLK_820_PCIEB		10 | ||||||
|  | +#define CLK_820_ETHB		11 | ||||||
|  | +#define CLK_820_REF600		12 | ||||||
|  | +#define CLK_820_USBDEV		13 | ||||||
|  |   | ||||||
|  |  #endif /* DT_CLOCK_OXSEMI_OX820_H */ | ||||||
							
								
								
									
										273
									
								
								target/linux/oxnas/patches-5.15/100-oxnas-clk-plla-pllb.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										273
									
								
								target/linux/oxnas/patches-5.15/100-oxnas-clk-plla-pllb.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,273 @@ | |||||||
|  | --- a/drivers/clk/clk-oxnas.c | ||||||
|  | +++ b/drivers/clk/clk-oxnas.c | ||||||
|  | @@ -5,19 +5,42 @@ | ||||||
|  |   * Copyright (C) 2016 Neil Armstrong <narmstrong@baylibre.com> | ||||||
|  |   */ | ||||||
|  |   | ||||||
|  | +#include <linux/clk.h> | ||||||
|  | +#include <linux/clkdev.h> | ||||||
|  |  #include <linux/clk-provider.h> | ||||||
|  |  #include <linux/kernel.h> | ||||||
|  |  #include <linux/init.h> | ||||||
|  | +#include <linux/delay.h> | ||||||
|  |  #include <linux/of.h> | ||||||
|  |  #include <linux/of_device.h> | ||||||
|  |  #include <linux/platform_device.h> | ||||||
|  |  #include <linux/stringify.h> | ||||||
|  |  #include <linux/regmap.h> | ||||||
|  |  #include <linux/mfd/syscon.h> | ||||||
|  | +#include <linux/reset.h> | ||||||
|  |   | ||||||
|  |  #include <dt-bindings/clock/oxsemi,ox810se.h> | ||||||
|  |  #include <dt-bindings/clock/oxsemi,ox820.h> | ||||||
|  |   | ||||||
|  | +#define REF300_DIV_INT_SHIFT		8 | ||||||
|  | +#define REF300_DIV_FRAC_SHIFT		0 | ||||||
|  | +#define REF300_DIV_INT(val)		((val) << REF300_DIV_INT_SHIFT) | ||||||
|  | +#define REF300_DIV_FRAC(val)		((val) << REF300_DIV_FRAC_SHIFT) | ||||||
|  | + | ||||||
|  | +#define PLLB_BYPASS			1 | ||||||
|  | +#define PLLB_ENSAT			3 | ||||||
|  | +#define PLLB_OUTDIV			4 | ||||||
|  | +#define PLLB_REFDIV			8 | ||||||
|  | +#define PLLB_DIV_INT_SHIFT		8 | ||||||
|  | +#define PLLB_DIV_FRAC_SHIFT		0 | ||||||
|  | +#define PLLB_DIV_INT(val)		((val) << PLLB_DIV_INT_SHIFT) | ||||||
|  | +#define PLLB_DIV_FRAC(val)		((val) << PLLB_DIV_FRAC_SHIFT) | ||||||
|  | + | ||||||
|  | +#define PLLA_REFDIV_MASK		0x3F | ||||||
|  | +#define PLLA_REFDIV_SHIFT		8 | ||||||
|  | +#define PLLA_OUTDIV_MASK		0x7 | ||||||
|  | +#define PLLA_OUTDIV_SHIFT		4 | ||||||
|  | + | ||||||
|  |  /* Standard regmap gate clocks */ | ||||||
|  |  struct clk_oxnas_gate { | ||||||
|  |  	struct clk_hw hw; | ||||||
|  | @@ -36,6 +59,135 @@ struct oxnas_stdclk_data { | ||||||
|  |  #define CLK_SET_REGOFFSET	0x2c | ||||||
|  |  #define CLK_CLR_REGOFFSET	0x30 | ||||||
|  |   | ||||||
|  | +#define PLLA_CTRL0_REGOFFSET	0x1f0 | ||||||
|  | +#define PLLA_CTRL1_REGOFFSET	0x1f4 | ||||||
|  | +#define PLLB_CTRL0_REGOFFSET	0x1001f0 | ||||||
|  | +#define MHZ (1000 * 1000) | ||||||
|  | + | ||||||
|  | +struct clk_oxnas_pll { | ||||||
|  | +	struct clk_hw hw; | ||||||
|  | +	struct device_node *devnode; | ||||||
|  | +	struct reset_control *rstc; | ||||||
|  | +	struct regmap *syscon; | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +#define to_clk_oxnas_pll(_hw) container_of(_hw, struct clk_oxnas_pll, hw) | ||||||
|  | + | ||||||
|  | +static unsigned long plla_clk_recalc_rate(struct clk_hw *hw, | ||||||
|  | +	unsigned long parent_rate) | ||||||
|  | +{ | ||||||
|  | +	struct clk_oxnas_pll *plla = to_clk_oxnas_pll(hw); | ||||||
|  | +	unsigned long fin = parent_rate; | ||||||
|  | +	unsigned long refdiv, outdiv; | ||||||
|  | +	unsigned int pll0, fbdiv; | ||||||
|  | + | ||||||
|  | +	BUG_ON(regmap_read(plla->syscon, PLLA_CTRL0_REGOFFSET, &pll0)); | ||||||
|  | + | ||||||
|  | +	refdiv = (pll0 >> PLLA_REFDIV_SHIFT) & PLLA_REFDIV_MASK; | ||||||
|  | +	refdiv += 1; | ||||||
|  | +	outdiv = (pll0 >> PLLA_OUTDIV_SHIFT) & PLLA_OUTDIV_MASK; | ||||||
|  | +	outdiv += 1; | ||||||
|  | + | ||||||
|  | +	BUG_ON(regmap_read(plla->syscon, PLLA_CTRL1_REGOFFSET, &fbdiv)); | ||||||
|  | +	/* seems we will not be here when pll is bypassed, so ignore this | ||||||
|  | +	 * case */ | ||||||
|  | + | ||||||
|  | +	return fin / MHZ * fbdiv / (refdiv * outdiv) / 32768 * MHZ; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static const char *pll_clk_parents[] = { | ||||||
|  | +	"oscillator", | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct clk_ops plla_ops = { | ||||||
|  | +	.recalc_rate = plla_clk_recalc_rate, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct clk_init_data clk_plla_init = { | ||||||
|  | +	.name = "plla", | ||||||
|  | +	.ops = &plla_ops, | ||||||
|  | +	.parent_names = pll_clk_parents, | ||||||
|  | +	.num_parents = ARRAY_SIZE(pll_clk_parents), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static int pllb_clk_is_prepared(struct clk_hw *hw) | ||||||
|  | +{ | ||||||
|  | +	struct clk_oxnas_pll *pllb = to_clk_oxnas_pll(hw); | ||||||
|  | + | ||||||
|  | +	return !!pllb->rstc; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int pllb_clk_prepare(struct clk_hw *hw) | ||||||
|  | +{ | ||||||
|  | +	struct clk_oxnas_pll *pllb = to_clk_oxnas_pll(hw); | ||||||
|  | + | ||||||
|  | +	pllb->rstc = of_reset_control_get(pllb->devnode, NULL); | ||||||
|  | + | ||||||
|  | +	return IS_ERR(pllb->rstc) ? PTR_ERR(pllb->rstc) : 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void pllb_clk_unprepare(struct clk_hw *hw) | ||||||
|  | +{ | ||||||
|  | +	struct clk_oxnas_pll *pllb = to_clk_oxnas_pll(hw); | ||||||
|  | + | ||||||
|  | +	BUG_ON(IS_ERR(pllb->rstc)); | ||||||
|  | + | ||||||
|  | +	reset_control_put(pllb->rstc); | ||||||
|  | +	pllb->rstc = NULL; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int pllb_clk_enable(struct clk_hw *hw) | ||||||
|  | +{ | ||||||
|  | +	struct clk_oxnas_pll *pllb = to_clk_oxnas_pll(hw); | ||||||
|  | + | ||||||
|  | +	BUG_ON(IS_ERR(pllb->rstc)); | ||||||
|  | + | ||||||
|  | +	/* put PLL into bypass */ | ||||||
|  | +	regmap_update_bits(pllb->syscon, PLLB_CTRL0_REGOFFSET, BIT(PLLB_BYPASS), BIT(PLLB_BYPASS)); | ||||||
|  | +	wmb(); | ||||||
|  | +	udelay(10); | ||||||
|  | +	reset_control_assert(pllb->rstc); | ||||||
|  | +	udelay(10); | ||||||
|  | +	/* set PLL B control information */ | ||||||
|  | +	regmap_write_bits(pllb->syscon, PLLB_CTRL0_REGOFFSET, 0xffff, | ||||||
|  | +			  (1 << PLLB_ENSAT) | (1 << PLLB_OUTDIV) | (2 << PLLB_REFDIV)); | ||||||
|  | +	reset_control_deassert(pllb->rstc); | ||||||
|  | +	udelay(100); | ||||||
|  | +	regmap_update_bits(pllb->syscon, PLLB_CTRL0_REGOFFSET, BIT(PLLB_BYPASS), 0); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void pllb_clk_disable(struct clk_hw *hw) | ||||||
|  | +{ | ||||||
|  | +	struct clk_oxnas_pll *pllb = to_clk_oxnas_pll(hw); | ||||||
|  | + | ||||||
|  | +	BUG_ON(IS_ERR(pllb->rstc)); | ||||||
|  | + | ||||||
|  | +	/* put PLL into bypass */ | ||||||
|  | +	regmap_update_bits(pllb->syscon, PLLB_CTRL0_REGOFFSET, BIT(PLLB_BYPASS), BIT(PLLB_BYPASS)); | ||||||
|  | + | ||||||
|  | +	wmb(); | ||||||
|  | +	udelay(10); | ||||||
|  | + | ||||||
|  | +	reset_control_assert(pllb->rstc); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static struct clk_ops pllb_ops = { | ||||||
|  | +	.prepare = pllb_clk_prepare, | ||||||
|  | +	.unprepare = pllb_clk_unprepare, | ||||||
|  | +	.is_prepared = pllb_clk_is_prepared, | ||||||
|  | +	.enable = pllb_clk_enable, | ||||||
|  | +	.disable = pllb_clk_disable, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct clk_init_data clk_pllb_init = { | ||||||
|  | +	.name = "pllb", | ||||||
|  | +	.ops = &pllb_ops, | ||||||
|  | +	.parent_names = pll_clk_parents, | ||||||
|  | +	.num_parents = ARRAY_SIZE(pll_clk_parents), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  |  static inline struct clk_oxnas_gate *to_clk_oxnas_gate(struct clk_hw *hw) | ||||||
|  |  { | ||||||
|  |  	return container_of(hw, struct clk_oxnas_gate, hw); | ||||||
|  | @@ -249,3 +401,42 @@ static struct platform_driver oxnas_stdc | ||||||
|  |  	}, | ||||||
|  |  }; | ||||||
|  |  builtin_platform_driver(oxnas_stdclk_driver); | ||||||
|  | + | ||||||
|  | +void __init oxnas_init_plla(struct device_node *np) | ||||||
|  | +{ | ||||||
|  | +	struct clk *clk; | ||||||
|  | +	struct clk_oxnas_pll *plla; | ||||||
|  | + | ||||||
|  | +	plla = kmalloc(sizeof(*plla), GFP_KERNEL); | ||||||
|  | +	BUG_ON(!plla); | ||||||
|  | + | ||||||
|  | +	plla->syscon = syscon_node_to_regmap(of_get_parent(np)); | ||||||
|  | +	plla->hw.init = &clk_plla_init; | ||||||
|  | +	plla->devnode = np; | ||||||
|  | +	plla->rstc = NULL; | ||||||
|  | +	clk = clk_register(NULL, &plla->hw); | ||||||
|  | +	BUG_ON(IS_ERR(clk)); | ||||||
|  | +	/* mark it as enabled */ | ||||||
|  | +	clk_prepare_enable(clk); | ||||||
|  | +	of_clk_add_provider(np, of_clk_src_simple_get, clk); | ||||||
|  | +} | ||||||
|  | +CLK_OF_DECLARE(oxnas_plla, "plxtech,nas782x-plla", oxnas_init_plla); | ||||||
|  | + | ||||||
|  | +void __init oxnas_init_pllb(struct device_node *np) | ||||||
|  | +{ | ||||||
|  | +	struct clk *clk; | ||||||
|  | +	struct clk_oxnas_pll *pllb; | ||||||
|  | + | ||||||
|  | +	pllb = kmalloc(sizeof(*pllb), GFP_KERNEL); | ||||||
|  | +	BUG_ON(!pllb); | ||||||
|  | + | ||||||
|  | +	pllb->syscon = syscon_node_to_regmap(of_get_parent(np)); | ||||||
|  | +	pllb->hw.init = &clk_pllb_init; | ||||||
|  | +	pllb->devnode = np; | ||||||
|  | +	pllb->rstc = NULL; | ||||||
|  | + | ||||||
|  | +	clk = clk_register(NULL, &pllb->hw); | ||||||
|  | +	BUG_ON(IS_ERR(clk)); | ||||||
|  | +	of_clk_add_provider(np, of_clk_src_simple_get, clk); | ||||||
|  | +} | ||||||
|  | +CLK_OF_DECLARE(oxnas_pllb, "plxtech,nas782x-pllb", oxnas_init_pllb); | ||||||
|  | --- a/arch/arm/boot/dts/ox820.dtsi | ||||||
|  | +++ b/arch/arm/boot/dts/ox820.dtsi | ||||||
|  | @@ -61,12 +61,6 @@ | ||||||
|  |  			clocks = <&osc>; | ||||||
|  |  		}; | ||||||
|  |   | ||||||
|  | -		plla: plla { | ||||||
|  | -			compatible = "fixed-clock"; | ||||||
|  | -			#clock-cells = <0>; | ||||||
|  | -			clock-frequency = <850000000>; | ||||||
|  | -		}; | ||||||
|  | - | ||||||
|  |  		armclk: armclk { | ||||||
|  |  			compatible = "fixed-factor-clock"; | ||||||
|  |  			#clock-cells = <0>; | ||||||
|  | @@ -266,6 +260,19 @@ | ||||||
|  |  					compatible = "oxsemi,ox820-stdclk", "oxsemi,ox810se-stdclk"; | ||||||
|  |  					#clock-cells = <1>; | ||||||
|  |  				}; | ||||||
|  | + | ||||||
|  | +				plla: plla { | ||||||
|  | +					compatible = "plxtech,nas782x-plla"; | ||||||
|  | +					#clock-cells = <0>; | ||||||
|  | +					clocks = <&osc>; | ||||||
|  | +				}; | ||||||
|  | + | ||||||
|  | +				pllb: pllb { | ||||||
|  | +					compatible = "plxtech,nas782x-pllb"; | ||||||
|  | +					#clock-cells = <0>; | ||||||
|  | +					clocks = <&osc>; | ||||||
|  | +					resets = <&reset RESET_PLLB>; | ||||||
|  | +				}; | ||||||
|  |  			}; | ||||||
|  |  		}; | ||||||
|  |   | ||||||
|  | @@ -287,6 +294,13 @@ | ||||||
|  |  				clocks = <&armclk>; | ||||||
|  |  			}; | ||||||
|  |   | ||||||
|  | +			watchdog@620 { | ||||||
|  | +				compatible = "mpcore_wdt"; | ||||||
|  | +				reg = <0x620 0x20>; | ||||||
|  | +				interrupts = <GIC_PPI 14 (GIC_CPU_MASK_RAW(3)|IRQ_TYPE_LEVEL_HIGH)>; | ||||||
|  | +				clocks = <&armclk>; | ||||||
|  | +			}; | ||||||
|  | + | ||||||
|  |  			gic: interrupt-controller@1000 { | ||||||
|  |  				compatible = "arm,arm11mp-gic"; | ||||||
|  |  				interrupt-controller; | ||||||
							
								
								
									
										25
									
								
								target/linux/oxnas/patches-5.15/150-oxnas-restart.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								target/linux/oxnas/patches-5.15/150-oxnas-restart.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | --- a/drivers/power/reset/Kconfig | ||||||
|  | +++ b/drivers/power/reset/Kconfig | ||||||
|  | @@ -148,6 +148,12 @@ config POWER_RESET_OXNAS | ||||||
|  |  	help | ||||||
|  |  	  Restart support for OXNAS/PLXTECH OX820 SoC. | ||||||
|  |   | ||||||
|  | +config POWER_RESET_OXNAS | ||||||
|  | +	bool "OXNAS SoC restart driver" | ||||||
|  | +	depends on ARCH_OXNAS | ||||||
|  | +	help | ||||||
|  | +	  Restart support for OXNAS boards. | ||||||
|  | + | ||||||
|  |  config POWER_RESET_PIIX4_POWEROFF | ||||||
|  |  	tristate "Intel PIIX4 power-off driver" | ||||||
|  |  	depends on PCI | ||||||
|  | --- a/drivers/power/reset/Makefile | ||||||
|  | +++ b/drivers/power/reset/Makefile | ||||||
|  | @@ -19,6 +19,7 @@ obj-$(CONFIG_POWER_RESET_QCOM_PON) += qc | ||||||
|  |  obj-$(CONFIG_POWER_RESET_OCELOT_RESET) += ocelot-reset.o | ||||||
|  |  obj-$(CONFIG_POWER_RESET_PIIX4_POWEROFF) += piix4-poweroff.o | ||||||
|  |  obj-$(CONFIG_POWER_RESET_LTC2952) += ltc2952-poweroff.o | ||||||
|  | +obj-$(CONFIG_POWER_RESET_OXNAS) += oxnas-restart.o | ||||||
|  |  obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o | ||||||
|  |  obj-$(CONFIG_POWER_RESET_REGULATOR) += regulator-poweroff.o | ||||||
|  |  obj-$(CONFIG_POWER_RESET_RESTART) += restart-poweroff.o | ||||||
							
								
								
									
										44
									
								
								target/linux/oxnas/patches-5.15/320-oxnas-phy-pcie.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								target/linux/oxnas/patches-5.15/320-oxnas-phy-pcie.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | --- a/arch/arm/boot/dts/ox820.dtsi | ||||||
|  | +++ b/arch/arm/boot/dts/ox820.dtsi | ||||||
|  | @@ -247,6 +247,15 @@ | ||||||
|  |  				}; | ||||||
|  |  			}; | ||||||
|  |   | ||||||
|  | +			pcie_phy: pcie-phy@a00000 { | ||||||
|  | +				compatible = "oxsemi,ox820-pcie-phy"; | ||||||
|  | +				reg = <0xa00000 0x10>; | ||||||
|  | +				#phy-cells = <0>; | ||||||
|  | +				resets = <&reset RESET_PCIEPHY>; | ||||||
|  | +				reset-names = "phy"; | ||||||
|  | +				status = "disabled"; | ||||||
|  | +			}; | ||||||
|  | + | ||||||
|  |  			sys: sys-ctrl@e00000 { | ||||||
|  |  				compatible = "oxsemi,ox820-sys-ctrl", "syscon", "simple-mfd"; | ||||||
|  |  				reg = <0xe00000 0x200000>; | ||||||
|  | --- a/drivers/phy/Kconfig | ||||||
|  | +++ b/drivers/phy/Kconfig | ||||||
|  | @@ -35,6 +35,13 @@ config PHY_LPC18XX_USB_OTG | ||||||
|  |  	  This driver is need for USB0 support on LPC18xx/43xx and takes | ||||||
|  |  	  care of enabling and clock setup. | ||||||
|  |   | ||||||
|  | +config PHY_OXNAS | ||||||
|  | +	tristate "Oxford Semi. OX820 PCI-E PHY support" | ||||||
|  | +	depends on HAS_IOMEM && OF && (ARM || COMPILE_TEST) | ||||||
|  | +	select GENERIC_PHY | ||||||
|  | +	help | ||||||
|  | +	  This option enables support for OXNAS OX820 SoC PCIE PHY. | ||||||
|  | + | ||||||
|  |  config PHY_PISTACHIO_USB | ||||||
|  |  	tristate "IMG Pistachio USB2.0 PHY driver" | ||||||
|  |  	depends on MIPS || COMPILE_TEST | ||||||
|  | --- a/drivers/phy/Makefile | ||||||
|  | +++ b/drivers/phy/Makefile | ||||||
|  | @@ -7,6 +7,7 @@ obj-$(CONFIG_GENERIC_PHY)		+= phy-core.o | ||||||
|  |  obj-$(CONFIG_GENERIC_PHY_MIPI_DPHY)	+= phy-core-mipi-dphy.o | ||||||
|  |  obj-$(CONFIG_PHY_CAN_TRANSCEIVER)	+= phy-can-transceiver.o | ||||||
|  |  obj-$(CONFIG_PHY_LPC18XX_USB_OTG)	+= phy-lpc18xx-usb-otg.o | ||||||
|  | +obj-$(CONFIG_PHY_OXNAS)			+= phy-oxnas-pcie.o | ||||||
|  |  obj-$(CONFIG_PHY_XGENE)			+= phy-xgene.o | ||||||
|  |  obj-$(CONFIG_PHY_PISTACHIO_USB)		+= phy-pistachio-usb.o | ||||||
|  |  obj-$(CONFIG_USB_LGM_PHY)		+= phy-lgm-usb.o | ||||||
							
								
								
									
										122
									
								
								target/linux/oxnas/patches-5.15/340-oxnas-pcie.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								target/linux/oxnas/patches-5.15/340-oxnas-pcie.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,122 @@ | |||||||
|  | --- a/drivers/pci/controller/Kconfig | ||||||
|  | +++ b/drivers/pci/controller/Kconfig | ||||||
|  | @@ -312,6 +312,11 @@ config PCIE_HISI_ERR | ||||||
|  |  	  Say Y here if you want error handling support | ||||||
|  |  	  for the PCIe controller's errors on HiSilicon HIP SoCs | ||||||
|  |   | ||||||
|  | +config PCIE_OXNAS | ||||||
|  | +	bool "PLX Oxnas PCIe controller" | ||||||
|  | +	depends on ARCH_OXNAS | ||||||
|  | +	select PCIEPORTBUS | ||||||
|  | + | ||||||
|  |  source "drivers/pci/controller/dwc/Kconfig" | ||||||
|  |  source "drivers/pci/controller/mobiveil/Kconfig" | ||||||
|  |  source "drivers/pci/controller/cadence/Kconfig" | ||||||
|  | --- a/drivers/pci/controller/Makefile | ||||||
|  | +++ b/drivers/pci/controller/Makefile | ||||||
|  | @@ -33,6 +33,7 @@ obj-$(CONFIG_PCIE_ROCKCHIP_HOST) += pcie | ||||||
|  |  obj-$(CONFIG_PCIE_MEDIATEK) += pcie-mediatek.o | ||||||
|  |  obj-$(CONFIG_PCIE_MEDIATEK_GEN3) += pcie-mediatek-gen3.o | ||||||
|  |  obj-$(CONFIG_PCIE_MICROCHIP_HOST) += pcie-microchip-host.o | ||||||
|  | +obj-$(CONFIG_PCIE_OXNAS) += pcie-oxnas.o | ||||||
|  |  obj-$(CONFIG_VMD) += vmd.o | ||||||
|  |  obj-$(CONFIG_PCIE_BRCMSTB) += pcie-brcmstb.o | ||||||
|  |  obj-$(CONFIG_PCI_LOONGSON) += pci-loongson.o | ||||||
|  | --- a/arch/arm/boot/dts/ox820.dtsi | ||||||
|  | +++ b/arch/arm/boot/dts/ox820.dtsi | ||||||
|  | @@ -289,7 +289,7 @@ | ||||||
|  |  			#address-cells = <1>; | ||||||
|  |  			#size-cells = <1>; | ||||||
|  |  			compatible = "simple-bus"; | ||||||
|  | -			ranges = <0 0x47000000 0x1000000>; | ||||||
|  | +			ranges = <0 0x47000000 0x2000>; | ||||||
|  |   | ||||||
|  |  			scu: scu@0 { | ||||||
|  |  				compatible = "arm,arm11mp-scu"; | ||||||
|  | @@ -318,5 +318,86 @@ | ||||||
|  |  				      <0x100 0x500>; | ||||||
|  |  			}; | ||||||
|  |  		}; | ||||||
|  | + | ||||||
|  | +		pcie0: pcie-controller@47c00000 { | ||||||
|  | +			compatible = "plxtech,nas782x-pcie"; | ||||||
|  | +			device_type = "pci"; | ||||||
|  | +			#address-cells = <3>; | ||||||
|  | +			#size-cells = <2>; | ||||||
|  | + | ||||||
|  | +			/*		flag & space	bus address	host address	size */ | ||||||
|  | +			ranges = <	0x82000000	0 0x48000000	0x48000000	0 0x2000000 | ||||||
|  | +					0xC2000000	0 0x4A000000	0x4A000000	0 0x1E00000 | ||||||
|  | +					0x81000000	0 0x4BE00000	0x4BE00000	0 0x0100000 | ||||||
|  | +					0x80000000	0 0x4BF00000	0x4BF00000	0 0x0100000>; | ||||||
|  | + | ||||||
|  | +			bus-range = <0x00 0x7f>; | ||||||
|  | + | ||||||
|  | +			/*	cfg			inbound translator	*/ | ||||||
|  | +			reg =	<0x47c00000 0x1000>,	<0x47d00000 0x100>; | ||||||
|  | + | ||||||
|  | +			phys = <&pcie_phy>; | ||||||
|  | +			phy-names = "pcie-phy"; | ||||||
|  | + | ||||||
|  | +			#interrupt-cells = <1>; | ||||||
|  | +			/* wild card mask, match all bus address & interrupt specifier */ | ||||||
|  | +			/* format: bus address mask, interrupt specifier mask */ | ||||||
|  | +			/* each bit 1 means need match, 0 means ignored when match */ | ||||||
|  | +			interrupt-map-mask = <0 0 0 0>; | ||||||
|  | +			/* format: a list of: bus address, interrupt specifier, | ||||||
|  | +			 * parent interrupt controller & specifier */ | ||||||
|  | +			interrupt-map = <0 0 0 0 &gic 0 19 0x304>; | ||||||
|  | +			gpios = <&gpio1 12 0>; | ||||||
|  | +			clocks = <&stdclk CLK_820_PCIEA>, <&pllb>; | ||||||
|  | +			clock-names = "pcie", "busclk"; | ||||||
|  | +			resets = <&reset RESET_PCIEA>; | ||||||
|  | +			reset-names = "pcie"; | ||||||
|  | + | ||||||
|  | +			plxtech,pcie-hcsl-bit = <2>; | ||||||
|  | +			plxtech,pcie-ctrl-offset = <0x120>; | ||||||
|  | +			plxtech,pcie-outbound-offset = <0x138>; | ||||||
|  | +			status = "disabled"; | ||||||
|  | +		}; | ||||||
|  | + | ||||||
|  | +		pcie1: pcie-controller@47e00000 { | ||||||
|  | +			compatible = "plxtech,nas782x-pcie"; | ||||||
|  | +			device_type = "pci"; | ||||||
|  | +			#address-cells = <3>; | ||||||
|  | +			#size-cells = <2>; | ||||||
|  | + | ||||||
|  | +			/*		flag & space	bus address	host address	size */ | ||||||
|  | +			ranges = <	0x82000000	0 0x4C000000	0x4C000000	0 0x2000000 | ||||||
|  | +					0xC2000000	0 0x4E000000	0x4E000000	0 0x1E00000 | ||||||
|  | +					0x81000000	0 0x4FE00000	0x4FE00000	0 0x0100000 | ||||||
|  | +					0x80000000	0 0x4FF00000	0x4FF00000	0 0x0100000>; | ||||||
|  | + | ||||||
|  | +			bus-range = <0x80 0xff>; | ||||||
|  | + | ||||||
|  | +			/*	cfg			inbound translator	*/ | ||||||
|  | +			reg =	<0x47e00000 0x1000>,	<0x47f00000 0x100>; | ||||||
|  | + | ||||||
|  | +			phys = <&pcie_phy>; | ||||||
|  | +			phy-names = "pcie-phy"; | ||||||
|  | + | ||||||
|  | +			#interrupt-cells = <1>; | ||||||
|  | +			/* wild card mask, match all bus address & interrupt specifier */ | ||||||
|  | +			/* format: bus address mask, interrupt specifier mask */ | ||||||
|  | +			/* each bit 1 means need match, 0 means ignored when match */ | ||||||
|  | +			interrupt-map-mask = <0 0 0 0>; | ||||||
|  | +			/* format: a list of: bus address, interrupt specifier, | ||||||
|  | +			 * parent interrupt controller & specifier */ | ||||||
|  | +			interrupt-map = <0 0 0 0 &gic 0 20 0x304>; | ||||||
|  | + | ||||||
|  | +			/* gpios = <&gpio1 12 0>; */ | ||||||
|  | +			clocks = <&stdclk CLK_820_PCIEB>, <&pllb>; | ||||||
|  | +			clock-names = "pcie", "busclk"; | ||||||
|  | +			resets = <&reset RESET_PCIEB>; | ||||||
|  | +			reset-names = "pcie"; | ||||||
|  | + | ||||||
|  | +			plxtech,pcie-hcsl-bit = <3>; | ||||||
|  | +			plxtech,pcie-ctrl-offset = <0x124>; | ||||||
|  | +			plxtech,pcie-outbound-offset = <0x174>; | ||||||
|  | +			status = "disabled"; | ||||||
|  | +		}; | ||||||
|  |  	}; | ||||||
|  |  }; | ||||||
							
								
								
									
										60
									
								
								target/linux/oxnas/patches-5.15/500-oxnas-sata.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								target/linux/oxnas/patches-5.15/500-oxnas-sata.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | |||||||
|  | --- a/drivers/ata/Kconfig | ||||||
|  | +++ b/drivers/ata/Kconfig | ||||||
|  | @@ -568,6 +568,14 @@ config SATA_VITESSE | ||||||
|  |   | ||||||
|  |  	  If unsure, say N. | ||||||
|  |   | ||||||
|  | +config SATA_OXNAS | ||||||
|  | +	tristate "PLXTECH NAS782X SATA support" | ||||||
|  | +	select SATA_HOST | ||||||
|  | +	help | ||||||
|  | +	  This option enables support for Nas782x Serial ATA controller. | ||||||
|  | + | ||||||
|  | +	  If unsure, say N. | ||||||
|  | + | ||||||
|  |  comment "PATA SFF controllers with BMDMA" | ||||||
|  |   | ||||||
|  |  config PATA_ALI | ||||||
|  | --- a/drivers/ata/Makefile | ||||||
|  | +++ b/drivers/ata/Makefile | ||||||
|  | @@ -46,6 +46,7 @@ obj-$(CONFIG_SATA_SVW)		+= sata_svw.o | ||||||
|  |  obj-$(CONFIG_SATA_ULI)		+= sata_uli.o | ||||||
|  |  obj-$(CONFIG_SATA_VIA)		+= sata_via.o | ||||||
|  |  obj-$(CONFIG_SATA_VITESSE)	+= sata_vsc.o | ||||||
|  | +obj-$(CONFIG_SATA_OXNAS)	+= sata_oxnas.o | ||||||
|  |   | ||||||
|  |  # SFF PATA w/ BMDMA | ||||||
|  |  obj-$(CONFIG_PATA_ALI)		+= pata_ali.o | ||||||
|  | --- a/arch/arm/boot/dts/ox820.dtsi | ||||||
|  | +++ b/arch/arm/boot/dts/ox820.dtsi | ||||||
|  | @@ -399,5 +399,20 @@ | ||||||
|  |  			plxtech,pcie-outbound-offset = <0x174>; | ||||||
|  |  			status = "disabled"; | ||||||
|  |  		}; | ||||||
|  | + | ||||||
|  | +		sata: sata@45900000 { | ||||||
|  | +			compatible = "plxtech,nas782x-sata"; | ||||||
|  | +				/*	ports		dmactl		sgdma	*/ | ||||||
|  | +			reg = <0x45900000 0x20000>, <0x459A0000 0x40>, <0x459B0000 0x20>, | ||||||
|  | +				/*	core		phy		descriptors (optional)	*/ | ||||||
|  | +				<0x459E0000 0x2000>, <0x44900000 0x0C>, <0x50000000 0x1000>; | ||||||
|  | +			interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>; | ||||||
|  | +			clocks = <&stdclk CLK_820_SATA>; | ||||||
|  | +			resets = <&reset RESET_SATA>, <&reset RESET_SATA_LINK>, <&reset RESET_SATA_PHY>; | ||||||
|  | +			reset-names = "sata", "link", "phy"; | ||||||
|  | +			nr-ports = <1>; | ||||||
|  | +			status = "disabled"; | ||||||
|  | +		}; | ||||||
|  | + | ||||||
|  |  	}; | ||||||
|  |  }; | ||||||
|  | --- a/arch/arm/boot/dts/ox820-cloudengines-pogoplug-series-3.dts | ||||||
|  | +++ b/arch/arm/boot/dts/ox820-cloudengines-pogoplug-series-3.dts | ||||||
|  | @@ -111,3 +111,7 @@ | ||||||
|  |  	pinctrl-names = "default"; | ||||||
|  |  	pinctrl-0 = <&pinctrl_etha_mdio>; | ||||||
|  |  }; | ||||||
|  | + | ||||||
|  | +&sata { | ||||||
|  | +	status = "okay"; | ||||||
|  | +}; | ||||||
							
								
								
									
										10
									
								
								target/linux/oxnas/patches-5.15/510-ox820-libata-leds.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								target/linux/oxnas/patches-5.15/510-ox820-libata-leds.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | --- a/arch/arm/mach-oxnas/Kconfig | ||||||
|  | +++ b/arch/arm/mach-oxnas/Kconfig | ||||||
|  | @@ -2,6 +2,7 @@ | ||||||
|  |  menuconfig ARCH_OXNAS | ||||||
|  |  	bool "Oxford Semiconductor OXNAS Family SoCs" | ||||||
|  |  	select ARCH_HAS_RESET_CONTROLLER | ||||||
|  | +	select ARCH_WANT_LIBATA_LEDS | ||||||
|  |  	select COMMON_CLK_OXNAS | ||||||
|  |  	select GPIOLIB | ||||||
|  |  	select MFD_SYSCON | ||||||
							
								
								
									
										73
									
								
								target/linux/oxnas/patches-5.15/800-oxnas-ehci.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								target/linux/oxnas/patches-5.15/800-oxnas-ehci.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | |||||||
|  | --- a/drivers/usb/host/Kconfig | ||||||
|  | +++ b/drivers/usb/host/Kconfig | ||||||
|  | @@ -339,6 +339,13 @@ config USB_OCTEON_EHCI | ||||||
|  |  	  USB 2.0 device support.  All CN6XXX based chips with USB are | ||||||
|  |  	  supported. | ||||||
|  |   | ||||||
|  | +config USB_EHCI_OXNAS | ||||||
|  | +	tristate "OXNAS EHCI Module" | ||||||
|  | +	depends on USB_EHCI_HCD && ARCH_OXNAS | ||||||
|  | +	select USB_EHCI_ROOT_HUB_TT | ||||||
|  | +	help | ||||||
|  | +	  Enable support for the OX820 SOC's on-chip EHCI controller. | ||||||
|  | + | ||||||
|  |  endif # USB_EHCI_HCD | ||||||
|  |   | ||||||
|  |  config USB_OXU210HP_HCD | ||||||
|  | --- a/drivers/usb/host/Makefile | ||||||
|  | +++ b/drivers/usb/host/Makefile | ||||||
|  | @@ -46,6 +46,7 @@ obj-$(CONFIG_USB_EHCI_HCD_STI)	+= ehci-s | ||||||
|  |  obj-$(CONFIG_USB_EHCI_EXYNOS)	+= ehci-exynos.o | ||||||
|  |  obj-$(CONFIG_USB_EHCI_HCD_AT91) += ehci-atmel.o | ||||||
|  |  obj-$(CONFIG_USB_EHCI_BRCMSTB)	+= ehci-brcm.o | ||||||
|  | +obj-$(CONFIG_USB_EHCI_OXNAS)	+= ehci-oxnas.o | ||||||
|  |   | ||||||
|  |  obj-$(CONFIG_USB_OXU210HP_HCD)	+= oxu210hp-hcd.o | ||||||
|  |  obj-$(CONFIG_USB_ISP116X_HCD)	+= isp116x-hcd.o | ||||||
|  | --- a/arch/arm/boot/dts/ox820.dtsi | ||||||
|  | +++ b/arch/arm/boot/dts/ox820.dtsi | ||||||
|  | @@ -106,6 +106,31 @@ | ||||||
|  |  			status = "disabled"; | ||||||
|  |  		}; | ||||||
|  |   | ||||||
|  | +		ehci: ehci@40200100 { | ||||||
|  | +			compatible = "plxtech,nas782x-ehci"; | ||||||
|  | +			reg = <0x40200100 0xf00>; | ||||||
|  | +			interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>; | ||||||
|  | +			clocks = <&stdclk CLK_820_USBMPH>, <&pllb>, <&stdclk CLK_820_REF600>; | ||||||
|  | +			clock-names = "usb", "refsrc", "phyref"; | ||||||
|  | +			resets = <&reset RESET_USBHS>, <&reset RESET_USBPHYA>, <&reset RESET_USBPHYB>; | ||||||
|  | +			reset-names = "host", "phya", "phyb"; | ||||||
|  | +			oxsemi,sys-ctrl = <&sys>; | ||||||
|  | +			/* Otherwise ref300 is used, which is derived from sata phy | ||||||
|  | +			 * in that case, usb depends on sata initialization */ | ||||||
|  | +			/* FIXME: how to make this dependency explicit ? */ | ||||||
|  | +			oxsemi,ehci_use_pllb; | ||||||
|  | +			status = "disabled"; | ||||||
|  | + | ||||||
|  | +			ehci_port1: port@1 { | ||||||
|  | +				reg = <1>; | ||||||
|  | +				#trigger-source-cells = <0>; | ||||||
|  | +			}; | ||||||
|  | +			ehci_port2: port@2 { | ||||||
|  | +				reg = <2>; | ||||||
|  | +				#trigger-source-cells = <0>; | ||||||
|  | +			}; | ||||||
|  | +		}; | ||||||
|  | + | ||||||
|  |  		apb-bridge@44000000 { | ||||||
|  |  			#address-cells = <1>; | ||||||
|  |  			#size-cells = <1>; | ||||||
|  | --- a/arch/arm/boot/dts/ox820-cloudengines-pogoplug-series-3.dts | ||||||
|  | +++ b/arch/arm/boot/dts/ox820-cloudengines-pogoplug-series-3.dts | ||||||
|  | @@ -105,6 +105,10 @@ | ||||||
|  |  	}; | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +&ehci { | ||||||
|  | +	status = "okay"; | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  |  ða { | ||||||
|  |  	status = "okay"; | ||||||
|  |   | ||||||
| @@ -0,0 +1,189 @@ | |||||||
|  | From 71270226b14733a4b1f2cde58ea9265caa50b38d Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Adrian Panella <ianchi74@outlook.com> | ||||||
|  | Date: Thu, 9 Mar 2017 09:37:17 +0100 | ||||||
|  | Subject: [PATCH 67/69] generic: Mangle bootloader's kernel arguments | ||||||
|  |  | ||||||
|  | The command-line arguments provided by the boot loader will be | ||||||
|  | appended to a new device tree property: bootloader-args. | ||||||
|  | If there is a property "append-rootblock" in DT under /chosen | ||||||
|  | and a root= option in bootloaders command line it will be parsed | ||||||
|  | and added to DT bootargs with the form: <append-rootblock>XX. | ||||||
|  | Only command line ATAG will be processed, the rest of the ATAGs | ||||||
|  | sent by bootloader will be ignored. | ||||||
|  | This is usefull in dual boot systems, to get the current root partition | ||||||
|  | without afecting the rest of the system. | ||||||
|  |  | ||||||
|  | Signed-off-by: Adrian Panella <ianchi74@outlook.com> | ||||||
|  | --- | ||||||
|  |  arch/arm/Kconfig                        | 11 +++++ | ||||||
|  |  arch/arm/boot/compressed/atags_to_fdt.c | 72 ++++++++++++++++++++++++++++++++- | ||||||
|  |  init/main.c                             | 16 ++++++++ | ||||||
|  |  3 files changed, 98 insertions(+), 1 deletion(-) | ||||||
|  |  | ||||||
|  | --- a/arch/arm/Kconfig | ||||||
|  | +++ b/arch/arm/Kconfig | ||||||
|  | @@ -1727,6 +1727,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN | ||||||
|  |  	  The command-line arguments provided by the boot loader will be | ||||||
|  |  	  appended to the the device tree bootargs property. | ||||||
|  |   | ||||||
|  | +config ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE | ||||||
|  | +	bool "Append rootblock parsing bootloader's kernel arguments" | ||||||
|  | +	help | ||||||
|  | +	  The command-line arguments provided by the boot loader will be | ||||||
|  | +	  appended to a new device tree property: bootloader-args. | ||||||
|  | +	  If there is a property "append-rootblock" in DT under /chosen  | ||||||
|  | +	  and a root= option in bootloaders command line it will be parsed  | ||||||
|  | +	  and added to DT bootargs with the form: <append-rootblock>XX. | ||||||
|  | +	  Only command line ATAG will be processed, the rest of the ATAGs | ||||||
|  | +	  sent by bootloader will be ignored. | ||||||
|  | + | ||||||
|  |  endchoice | ||||||
|  |   | ||||||
|  |  config CMDLINE | ||||||
|  | --- a/arch/arm/boot/compressed/atags_to_fdt.c | ||||||
|  | +++ b/arch/arm/boot/compressed/atags_to_fdt.c | ||||||
|  | @@ -5,6 +5,8 @@ | ||||||
|  |   | ||||||
|  |  #if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND) | ||||||
|  |  #define do_extend_cmdline 1 | ||||||
|  | +#elif defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE) | ||||||
|  | +#define do_extend_cmdline 1 | ||||||
|  |  #else | ||||||
|  |  #define do_extend_cmdline 0 | ||||||
|  |  #endif | ||||||
|  | @@ -69,6 +71,59 @@ static uint32_t get_cell_size(const void | ||||||
|  |  	return cell_size; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE) | ||||||
|  | + | ||||||
|  | +static char *append_rootblock(char *dest, const char *str, int len, void *fdt) | ||||||
|  | +{ | ||||||
|  | +	char *ptr, *end; | ||||||
|  | +	char *root="root="; | ||||||
|  | +	int i, l; | ||||||
|  | +	const char *rootblock; | ||||||
|  | + | ||||||
|  | +	//ARM doesn't have __HAVE_ARCH_STRSTR, so search manually | ||||||
|  | +	ptr = str - 1; | ||||||
|  | + | ||||||
|  | +	do { | ||||||
|  | +		//first find an 'r' at the begining or after a space | ||||||
|  | +		do { | ||||||
|  | +			ptr++; | ||||||
|  | +			ptr = strchr(ptr, 'r'); | ||||||
|  | +			if(!ptr) return dest; | ||||||
|  | + | ||||||
|  | +		} while (ptr != str && *(ptr-1) != ' '); | ||||||
|  | + | ||||||
|  | +		//then check for the rest | ||||||
|  | +		for(i = 1; i <= 4; i++) | ||||||
|  | +			if(*(ptr+i) != *(root+i)) break; | ||||||
|  | + | ||||||
|  | +	} while (i != 5); | ||||||
|  | + | ||||||
|  | +	end = strchr(ptr, ' '); | ||||||
|  | +	end = end ? (end - 1) : (strchr(ptr, 0) - 1); | ||||||
|  | + | ||||||
|  | +	//find partition number (assumes format root=/dev/mtdXX | /dev/mtdblockXX | yy:XX ) | ||||||
|  | +	for( i = 0; end >= ptr && *end >= '0' && *end <= '9'; end--, i++); | ||||||
|  | +	ptr = end + 1; | ||||||
|  | + | ||||||
|  | +	/* if append-rootblock property is set use it to append to command line */ | ||||||
|  | +	rootblock = getprop(fdt, "/chosen", "append-rootblock", &l); | ||||||
|  | +	if(rootblock != NULL) { | ||||||
|  | +		if(*dest != ' ') { | ||||||
|  | +			*dest = ' '; | ||||||
|  | +			dest++; | ||||||
|  | +			len++; | ||||||
|  | +		} | ||||||
|  | +		if (len + l + i <= COMMAND_LINE_SIZE) { | ||||||
|  | +			memcpy(dest, rootblock, l); | ||||||
|  | +			dest += l - 1; | ||||||
|  | +			memcpy(dest, ptr, i); | ||||||
|  | +			dest += i; | ||||||
|  | +		} | ||||||
|  | +	} | ||||||
|  | +	return dest; | ||||||
|  | +} | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  |  static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline) | ||||||
|  |  { | ||||||
|  |  	char cmdline[COMMAND_LINE_SIZE]; | ||||||
|  | @@ -88,12 +143,21 @@ static void merge_fdt_bootargs(void *fdt | ||||||
|  |   | ||||||
|  |  	/* and append the ATAG_CMDLINE */ | ||||||
|  |  	if (fdt_cmdline) { | ||||||
|  | + | ||||||
|  | +#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE) | ||||||
|  | +		//save original bootloader args | ||||||
|  | +		//and append ubi.mtd with root partition number to current cmdline | ||||||
|  | +		setprop_string(fdt, "/chosen", "bootloader-args", fdt_cmdline); | ||||||
|  | +		ptr = append_rootblock(ptr, fdt_cmdline, len, fdt); | ||||||
|  | + | ||||||
|  | +#else | ||||||
|  |  		len = strlen(fdt_cmdline); | ||||||
|  |  		if (ptr - cmdline + len + 2 < COMMAND_LINE_SIZE) { | ||||||
|  |  			*ptr++ = ' '; | ||||||
|  |  			memcpy(ptr, fdt_cmdline, len); | ||||||
|  |  			ptr += len; | ||||||
|  |  		} | ||||||
|  | +#endif | ||||||
|  |  	} | ||||||
|  |  	*ptr = '\0'; | ||||||
|  |   | ||||||
|  | @@ -168,7 +232,9 @@ int atags_to_fdt(void *atag_list, void * | ||||||
|  |  			else | ||||||
|  |  				setprop_string(fdt, "/chosen", "bootargs", | ||||||
|  |  					       atag->u.cmdline.cmdline); | ||||||
|  | -		} else if (atag->hdr.tag == ATAG_MEM) { | ||||||
|  | +		} | ||||||
|  | +#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE | ||||||
|  | +		else if (atag->hdr.tag == ATAG_MEM) { | ||||||
|  |  			if (memcount >= sizeof(mem_reg_property)/4) | ||||||
|  |  				continue; | ||||||
|  |  			if (!atag->u.mem.size) | ||||||
|  | @@ -212,6 +278,10 @@ int atags_to_fdt(void *atag_list, void * | ||||||
|  |  		setprop(fdt, "/memory", "reg", mem_reg_property, | ||||||
|  |  			4 * memcount * memsize); | ||||||
|  |  	} | ||||||
|  | +#else | ||||||
|  | + | ||||||
|  | +	} | ||||||
|  | +#endif | ||||||
|  |   | ||||||
|  |  	return fdt_pack(fdt); | ||||||
|  |  } | ||||||
|  | --- a/init/main.c | ||||||
|  | +++ b/init/main.c | ||||||
|  | @@ -114,6 +114,10 @@ | ||||||
|  |   | ||||||
|  |  #include <kunit/test.h> | ||||||
|  |   | ||||||
|  | +#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE) | ||||||
|  | +#include <linux/of.h> | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  |  static int kernel_init(void *); | ||||||
|  |   | ||||||
|  |  extern void init_IRQ(void); | ||||||
|  | @@ -991,6 +995,18 @@ asmlinkage __visible void __init __no_sa | ||||||
|  |  	page_alloc_init(); | ||||||
|  |   | ||||||
|  |  	pr_notice("Kernel command line: %s\n", saved_command_line); | ||||||
|  | + | ||||||
|  | +#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE) | ||||||
|  | +	//Show bootloader's original command line for reference | ||||||
|  | +	if(of_chosen) { | ||||||
|  | +		const char *prop = of_get_property(of_chosen, "bootloader-args", NULL); | ||||||
|  | +		if(prop) | ||||||
|  | +			pr_notice("Bootloader command line (ignored): %s\n", prop); | ||||||
|  | +		else | ||||||
|  | +			pr_notice("Bootloader command line not present\n"); | ||||||
|  | +	} | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  |  	/* parameters may set static keys */ | ||||||
|  |  	jump_label_init(); | ||||||
|  |  	parse_early_param(); | ||||||
							
								
								
									
										57
									
								
								target/linux/oxnas/patches-5.15/999-libata-hacks.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								target/linux/oxnas/patches-5.15/999-libata-hacks.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | |||||||
|  | --- a/drivers/ata/libata-core.c | ||||||
|  | +++ b/drivers/ata/libata-core.c | ||||||
|  | @@ -1531,6 +1531,14 @@ unsigned ata_exec_internal_sg(struct ata | ||||||
|  |  		return AC_ERR_SYSTEM; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +	if (ap->ops->acquire_hw && !ap->ops->acquire_hw(ap, 0, 0)) { | ||||||
|  | +		spin_unlock_irqrestore(ap->lock, flags); | ||||||
|  | +		if (!ap->ops->acquire_hw(ap, 1, (2*HZ))) { | ||||||
|  | +			return AC_ERR_TIMEOUT; | ||||||
|  | +		} | ||||||
|  | +		spin_lock_irqsave(ap->lock, flags); | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  |  	/* initialize internal qc */ | ||||||
|  |  	qc = __ata_qc_from_tag(ap, ATA_TAG_INTERNAL); | ||||||
|  |   | ||||||
|  | @@ -4583,6 +4591,9 @@ struct ata_queued_cmd *ata_qc_new_init(s | ||||||
|  |  	if (unlikely(ap->pflags & ATA_PFLAG_FROZEN)) | ||||||
|  |  		return NULL; | ||||||
|  |   | ||||||
|  | +	if (ap->ops->qc_new && ap->ops->qc_new(ap)) | ||||||
|  | +		return NULL; | ||||||
|  | + | ||||||
|  |  	/* libsas case */ | ||||||
|  |  	if (ap->flags & ATA_FLAG_SAS_HOST) { | ||||||
|  |  		tag = ata_sas_allocate_tag(ap); | ||||||
|  | @@ -4628,6 +4639,8 @@ void ata_qc_free(struct ata_queued_cmd * | ||||||
|  |  		qc->tag = ATA_TAG_POISON; | ||||||
|  |  		if (ap->flags & ATA_FLAG_SAS_HOST) | ||||||
|  |  			ata_sas_free_tag(tag, ap); | ||||||
|  | +		if (ap->ops->qc_free) | ||||||
|  | +			ap->ops->qc_free(qc); | ||||||
|  |  	} | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | --- a/include/linux/libata.h | ||||||
|  | +++ b/include/linux/libata.h | ||||||
|  | @@ -917,6 +917,8 @@ struct ata_port_operations { | ||||||
|  |  	enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *qc); | ||||||
|  |  	unsigned int (*qc_issue)(struct ata_queued_cmd *qc); | ||||||
|  |  	bool (*qc_fill_rtf)(struct ata_queued_cmd *qc); | ||||||
|  | +	int (*qc_new)(struct ata_port *ap); | ||||||
|  | +	void (*qc_free)(struct ata_queued_cmd *qc); | ||||||
|  |   | ||||||
|  |  	/* | ||||||
|  |  	 * Configuration and exception handling | ||||||
|  | @@ -1007,6 +1009,9 @@ struct ata_port_operations { | ||||||
|  |  	void (*phy_reset)(struct ata_port *ap); | ||||||
|  |  	void (*eng_timeout)(struct ata_port *ap); | ||||||
|  |   | ||||||
|  | +	int (*acquire_hw)(struct ata_port *ap, int may_sleep, | ||||||
|  | +			  int timeout_jiffies); | ||||||
|  | + | ||||||
|  |  	/* | ||||||
|  |  	 * ->inherits must be the last field and all the preceding | ||||||
|  |  	 * fields must be pointers. | ||||||
		Reference in New Issue
	
	Block a user
	 Daniel Golle
					Daniel Golle