aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/oxnas/files/drivers
Commit message (Collapse)AuthorAgeFilesLines
* oxnas: fix qc_prep return in sata driver after kernel 4.14.200Adrian Schmutzler2020-10-121-1/+3
| | | | | | | | | | | | | | | | | | | | | | | This fixes a regression after a kernel change in 4.14.200 [1] that led to build failure on oxnas/ox820: drivers/ata/sata_oxnas.c:2238:13: error: initialization of 'enum ata_completion_errors (*)(struct ata_queued_cmd *)' from incompatible pointer type 'void (*)(struct ata_queued_cmd *)' [-Werror=incompatible-pointer-types] .qc_prep = sata_oxnas_qc_prep, ^~~~~~~~~~~~~~~~~~ drivers/ata/sata_oxnas.c:2238:13: note: (near initialization for 'sata_oxnas_ops.qc_prep') Our local driver is changed the same way as prototyped in the kernel patch, i.e. return type is changed and AC_ERR_OK return value is added. [1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=306a1c5b5683c1d37565e575386139a64bdbec6f Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> (cherry picked from commit f6ca57e4f40528a8a0103c9f0e9647a2e11d10c3)
* oxnas: reduce size of ATA DMA descriptor spaceDaniel Golle2020-08-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After years of trying to find the reason for random kernel crashes while both CPU and SATA are under load it has been found. Some odd commented-out #defines in kref's single-port driver [1] which were copied from the vendor driver made me develop a theory: The IO-mapped memory area for DMA descriptors apparetly got some holes just before the alignment boundaries. This feels like an off-by-one bug in the hardware or maybe those fields are used internally by the SATA controller's firmware. Whatever the cause is: they cannot be used and trying to use them results in reading back unexpected stuff and ends up with oopsing Unable to handle kernel paging request at virtual address d085c004 Work around the issue by reducing the area used for bmdma descriptors. This reduces SATA performance (iops) quite a bit, but finally makes things work reliably. Possibly one could optimize this much more by really just skipping the holes in that memory area -- however, that seems to be non-trivial with the driver and libata in it's current form (suggestions are welcome). The 'proper' way to have good SATA performance would be to make use of the hardware RAID features (one can use the JBOD mode to access even just a single disc transparently through the RAID controller integrated in the SATA host instead of accessing the SATA ports 'raw' as we do now). [1]: https://github.com/kref/linux-oxnas/blob/master/drivers/ata/sata_oxnas.c#L25 Signed-off-by: Daniel Golle <daniel@makrotopia.org> (cherry picked from commit 5793112f751ee3d9f841af4846d68e6b1ff1bff4, including fixup commit d75e75306301852a848824cf268d8b58eda28a8a)
* oxnas: replace oxnas-restart with version to be submitted to upstreamDaniel Golle2019-03-111-103/+136
| | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: move PCIe controller outside of simple-busDaniel Golle2019-03-101-7/+24
| | | | | | | | Move PCIe controller outside down to SoC level to avoid resource mapping problems. Also add more detailed error handling when mapping registers. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: pcie: model shared resource as external pcie-phy driverDaniel Golle2019-03-042-67/+164
| | | | | | | Refactor pcie-oxnas to have shared resources in syscon and new pcie-phy driver. Hopefully this revives PCIe... Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: convert pcie to builtin_platform_driverDaniel Golle2019-03-041-21/+12
| | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: restart: use register definitions from dt-bindingsDaniel Golle2019-03-031-60/+27
| | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: cleanup and improve pcie driverDaniel Golle2019-03-031-274/+45
| | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: add SoC restart driver for rebootDaniel Golle2019-03-031-0/+229
| | | | | | Refresh oxnas kernel config while at it. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: bring in new oxnas targetDaniel Golle2018-06-013-0/+3819
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Reboot the oxnas target based on Linux 4.14 by rebasing our support on top of the now-existing upstream kernel support. This commit brings oxnas support to the level of v4.17 having upstream drivers for Ethernet, Serial and NAND flash. Botch up OpenWrt's local drivers for EHCI, SATA and PCIe based on the new platform code and device-tree. Re-introduce base-files from old oxnas target which works for now but needs further clean-up towards generic board support. Functional issues: * PCIe won't come up (hence no USB3 on Shuttle KD20) * I2C bus of Akitio myCloud device is likely not to work (missing debounce support in new pinctrl driver) Code-style issues: * plla/pllb needs further cleanup -- currently their users or writing into the syscon regmap after acquireling the clk instead of using defined clk_*_*() functions to setup multipliers and dividors. * PCIe phy needs its own little driver. * SATA driver is a monster and should be split into an mfd having a raidctrl regmap, sata controller, sata ports and sata phy. Tested on MitraStar STG-212 aka. Medion Akoya MD86xxx and Shuttle KD20. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: kill old oxnas targetDaniel Golle2018-06-0110-5926/+0
| | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: remove some kprintf calls from NAND driverDaniel Golle2017-01-071-5/+0
| | | | | | They were added for debugging and I forgot to remove them. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: remove support for pre-4.4 kernels from driversDaniel Golle2017-01-043-58/+1
| | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: backport upstream NAND driverDaniel Golle2017-01-011-63/+180
| | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: revert to kernel 4.1Daniel Golle2016-07-184-1/+62
| | | | | | | | | A bug resulting in the NAND not being detected by newer kernels has kept me sleepless for months and yet I wasn't able to discover the cause. Bring back patches and files for 4.1 until this has been resolved. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: drop compatibility with old kernels from pinctrlDaniel Golle2016-05-201-8/+0
| | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: drop compatibility with old kernels from irq-rpsDaniel Golle2016-05-201-23/+1
| | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: drop compatibility with old kernels from dwmac-oxnasDaniel Golle2016-05-201-27/+0
| | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* oxnas: add spinlock in pinctrl driverJohn Crispin2016-03-201-2/+16
| | | | | | | | Try to address a race-condition in pinctrl-oxnas.c Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 49043
* oxnas: complete NAND driver clean-upJohn Crispin2016-03-101-4/+0
| | | | | | | | some bit rot was accidentally left-out in r48986, remove it. Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 48997
* oxnas: clean-up NAND driver to fix probing issueJohn Crispin2016-03-101-13/+5
| | | | | | | | | | | A re-write of the driver based on xway_nand.c and constants as well as the cmd_ctrl() function from the original oxnas_nand.c resulted in a extremely similar looking file (see diffsize), and fixes the issue of NAND not being detected on newer kernels. Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 48986
* oxnas: prepare platform and drivers for Linux 4.4Felix Fietkau2016-01-181-0/+4
| | | | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 48338
* oxnas: move gmac soc glue from mach to stmmac driverJohn Crispin2015-10-191-0/+172
| | | | | | | | | Still a lot of kernel-version ifdef'ery, but imho that's easy to remove once obsoleted and avoids duplicate code in the meantime. Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 47218
* oxnas: prepare pinctrl for kernel >=4.2John Crispin2015-10-191-0/+7
| | | | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 47217
* oxnas: prepare irqchip driver for kernel >=4.2John Crispin2015-10-191-3/+20
| | | | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 47216
* oxnas: fix duplicate include in clk-oxnasJohn Crispin2015-10-191-1/+1
| | | | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 47215
* oxnas: prepare for kernel 4.1John Crispin2015-08-171-1/+1
| | | | | | Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 46636
* oxnas: remove pre kernel 3.18 support from pinctrl driverJohn Crispin2015-03-211-32/+0
| | | | | | | | just some pruning... Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 44923
* oxnas: clk-oxnas: rework pllb enable functionFelix Fietkau2014-12-271-19/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | kernel lock debugging unveiled that we should not call of_reset_control_get inside a clock's enable operation (see below) move of_reset_control_* previously used in pllb_clk_enable to new pllb_clk_prepare and pllb_clk_unprepare functions. use a container to carry runtime information. ------------[ cut here ]------------ WARNING: CPU: 0 PID: 1 at kernel/locking/lockdep.c:2742 lockdep_trace_alloc+0xb8/0xfc() DEBUG_LOCKS_WARN_ON(irqs_disabled_flags(flags)) Modules linked in: CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.14.26 #6 [<c001a6ac>] (unwind_backtrace) from [<c0016dec>] (show_stack+0x10/0x14) [<c0016dec>] (show_stack) from [<c0194f68>] (dump_stack+0x7c/0x94) [<c0194f68>] (dump_stack) from [<c0021b50>] (warn_slowpath_common+0x68/0x8c) [<c0021b50>] (warn_slowpath_common) from [<c0021ba4>] (warn_slowpath_fmt+0x30/0x40) [<c0021ba4>] (warn_slowpath_fmt) from [<c0061b30>] (lockdep_trace_alloc+0xb8/0xfc) [<c0061b30>] (lockdep_trace_alloc) from [<c00cb740>] (kmem_cache_alloc+0x1c/0xf8) [<c00cb740>] (kmem_cache_alloc) from [<c01d33c8>] (of_reset_control_get+0xe8/0x12c) [<c01d33c8>] (of_reset_control_get) from [<c0269228>] (pllb_clk_enable+0x14/0xbc) [<c0269228>] (pllb_clk_enable) from [<c0265738>] (__clk_enable+0x54/0xa0) [<c0265738>] (__clk_enable) from [<c0265acc>] (clk_enable+0x18/0x2c) [<c0265acc>] (clk_enable) from [<c04325f8>] (oxnas_pcie_probe+0x3b8/0x6a0) [<c04325f8>] (oxnas_pcie_probe) from [<c01f2510>] (platform_drv_probe+0x18/0x48) [<c01f2510>] (platform_drv_probe) from [<c01f1070>] (driver_probe_device+0xd8/0x24c) [<c01f1070>] (driver_probe_device) from [<c01f1298>] (__driver_attach+0x70/0x94) [<c01f1298>] (__driver_attach) from [<c01ef728>] (bus_for_each_dev+0x4c/0x98) [<c01ef728>] (bus_for_each_dev) from [<c01f0818>] (bus_add_driver+0xcc/0x1e8) [<c01f0818>] (bus_add_driver) from [<c01f169c>] (driver_register+0xa0/0xe8) [<c01f169c>] (driver_register) from [<c01f2568>] (platform_driver_probe+0x20/0xa4) [<c01f2568>] (platform_driver_probe) from [<c0013a3c>] (do_one_initcall+0x90/0x140) [<c0013a3c>] (do_one_initcall) from [<c0421d38>] (kernel_init_freeable+0x1e4/0x2c0) [<c0421d38>] (kernel_init_freeable) from [<c000c214>] (kernel_init+0x8/0x104) [<c000c214>] (kernel_init) from [<c0008768>] (ret_from_fork+0x14/0x2c) ---[ end trace 5f17ed2f61e0683f ]--- Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 43787
* oxnas: sata_oxnas: make irq handler more readableFelix Fietkau2014-12-221-12/+13
| | | | | | | | | | safed one level of indention by using 'continue' instead of a lengthy if-clause. Signed-off-by: Daniel Golle <daniel@makrotopia.org> v2: use logic-AND instead of '?' operator when checking for hw bug 6320 SVN-Revision: 43768
* oxnas: sata_oxnas: refactoring phase 2Felix Fietkau2014-12-221-112/+175
| | | | | | | | | | | | | - replaced // comments by /* comments */ - added line-breaks where needed - fixed white-space according to kernel style - fixed some obvious spelling mistakes in comments and printks - removed some unneeded left-overs imported from vendor code-base - replaced printk(...) by libata macros where possible Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 43767
* oxnas: sata_oxnas: refactoring phase 1Felix Fietkau2014-12-221-114/+142
| | | | | | | | | | | | | locking for 2nd port and hwraid was added from vendor's GPL code which doesn't comply with current kernel coding style. - moved all global variables into host_priv - renamed locks - sanetized acquire() and release() parameter list Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 43766
* oxnas: add support for 2nd S-ATA port to sata_oxnas driverJohn Crispin2014-12-101-83/+560
| | | | | | | | | | | | | | | | similar to mv_sata, use nr-ports attribute from device tree. import and adapt locking code from vendor GPL sources. add dma controller handling, it may be used in future to avoid full core resets similar to the vendor SDK's "progressive cleanup" function. this is still very dirty and aimed to first of all do things quite exactly like the reference code. and it somehow works. obviously there is lots of room for improvement :) Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 43598
* oxnas: add copyright header to sata_oxnasJohn Crispin2014-12-101-0/+19
| | | | | | | | | sata_oxnas.c is obviously a refactored version of sata_ox820.c which does contain this header. Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 43597
* oxnas: ehci: rename vendor prefix plxtch to plxtechJohn Crispin2014-12-011-3/+3
| | | | | | | | | it was changed in DTS by commit oxnas-target: fix typo in OX820 device-tree Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 43474
* add new target 'oxnas'John Crispin2014-11-269-0/+5074
This is the oxnas target previously developed at http://gitorious.org/openwrt-oxnas Basically, this consolidates the changes and addtionas from http://github.org/kref/linux-oxnas into a new OpenWrt hardware target 'oxnas' adding support for PLX Technology NAS7820/NAS7821/NAS7825/... formally known as Oxford Semiconductor OXE810SE/OXE815/OX820/... For now there are 4 supported boards: Cloud Engines Pogoplug V3 (without PCIe) fully supported Cloud Engines Pogoplug Pro (with PCIe) fully supported MitraStar STG-212 aka ZyXEL NSA-212, aka Medion Akoya P89625 / P89636 / P89626 / P89630, aka Medion MD 86407 / MD 86805 / MD 86517 / MD 86587 fully supported, see http://wiki.openwrt.org/toh/medion/md86587 Shuttle KD-20 partially supported (S-ATA driver lacks support for 2nd port) Signed-off-by: Daniel Golle <daniel@makrotopia.org> SVN-Revision: 43388