aboutsummaryrefslogtreecommitdiff
path: root/drivers
AgeCommit message (Collapse)AuthorFilesLines
2015-12-11mtd: nand: denali: add missing nand_release() call in denali_remove()Boris BREZILLON1-2/+9
Unregister the NAND device from the NAND subsystem when removing a denali NAND controller, otherwise the MTD attached to the NAND device is still exposed by the MTD layer, and accesses to this device will likely crash the system. Fixes: 2a0a288ec258 ("mtd: denali: split the generic driver and PCI layer") Signed-off-by: Boris Brezillon <[email protected]> Acked-by: Dinh Nguyen <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-10mtd: brcmnand: defer to devm_ioremap_resource() for error checkingBrian Norris1-3/+0
devm_ioremap_resource() does error checking on the 'res' argument, so drop the error check in bcm6368_nand.c. Signed-off-by: Brian Norris <[email protected]> Tested-by: Simon Arlott <[email protected]>
2015-12-09mtd: brcmnand: Add support for the BCM6368Simon Arlott2-0/+146
The BCM6368 has a NAND interrupt register with combined status and enable registers. As the BCM6328, BCM6362 and BCM6368 all use v2.1 controllers, the first variant that will work with this driver is the BCM63268 using a v4.0 controller. Set up the device by disabling and acking all interrupts, then handle the CTRL_READY interrupt. Signed-off-by: Simon Arlott <[email protected]> Reviewed-by: Florian Fainelli <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-09mtd: brcmnand: Request and enable the clock if presentSimon Arlott1-14/+50
Attempt to enable a clock named "nand" as some SoCs have a clock for the controller that needs to be enabled. Signed-off-by: Simon Arlott <[email protected]> Reviewed-by: Florian Fainelli <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-09mtd: nand: Confine MTD_NAND_SH_FLCTL to SUPERHGeert Uytterhoeven1-1/+1
As of commit a521422ea4ae6128 ("ARM: shmobile: mackerel: Remove Legacy C board code"), the Renesas SuperH FLCTL driver is no longer used on ARM SH-Mobile SoCs. Restrict the dependencies, unless compile-testing. Signed-off-by: Geert Uytterhoeven <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-09mtd: spi-nor: Check the return value from read_sr()Fabio Estevam1-2/+8
We should better check the return value from read_sr() and propagate it in the case of error. Signed-off-by: Fabio Estevam <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-09mtd: partitions: support a cleanup callback for parsersBrian Norris3-4/+36
If partition parsers need to clean up their resources, we shouldn't assume that all memory will fit in a single kmalloc() that the caller can kfree(). We should allow the parser to provide a proper cleanup routine. Note that this means we need to keep a hold on the parser's module for a bit longer, and release it later with mtd_part_parser_put(). Alongside this, define a default callback that we'll automatically use if the parser doesn't provide one, so we can still retain the old behavior. Signed-off-by: Brian Norris <[email protected]> Reviewed-by: Boris Brezillon <[email protected]>
2015-12-09mtd: partitions: pass around 'mtd_partitions' wrapper structBrian Norris3-22/+31
For some of the core partitioning code, it helps to keep info about the parsed partition (and who parsed them) together in one place. Signed-off-by: Brian Norris <[email protected]>
2015-12-09mtd: partitions: remove kmemdup()Brian Norris3-11/+9
The use of kmemdup() complicates the error handling a bit. We don't actually need to allocate new memory, since this reference is treated as const, and it is copied into new memory by the partition registration code anyway. So remove it. Signed-off-by: Brian Norris <[email protected]> Reviewed-by: Boris Brezillon <[email protected]>
2015-12-09mtd: partitions: rename MTD parser get/putBrian Norris1-5/+8
We're going to reuse put_partition_parser(), so let's fix up the prefix naming a bit, to hopefully be more consistent. Also make convert to a true C function instead of a macro. Signed-off-by: Brian Norris <[email protected]> Reviewed-by: Boris Brezillon <[email protected]>
2015-12-09mtd: partitions: make parsers return 'const' partition arraysBrian Norris7-8/+8
We only want to modify these arrays inside the parser "drivers", so the drivers should construct them however they like, then return them as immutable arrays. This will make other refactorings easier. Signed-off-by: Brian Norris <[email protected]> Reviewed-by: Boris Brezillon <[email protected]>
2015-12-09mtd: ofpart: assign return argument exactly onceBrian Norris1-16/+19
It's easier to refactor these parsers if the return value gets assigned only once, just like every other MTD partition parser. This prepares for making the second arg to the parse_fn() const. This is OK if we construct the partitions completely first, and assign them to the return pointer only after we're done modifying them. Signed-off-by: Brian Norris <[email protected]> Reviewed-by: Boris Brezillon <[email protected]>
2015-12-09mtd: merge for-4.4 development into -next developmentBrian Norris1-2/+10
A few MAINTAINERS updates, and some DT binding/documentation fixups. Signed-off-by: Brian Norris <[email protected]>
2015-12-08doc: dt: mtd: partitions: add compatible property to "partitions" nodeBrian Norris1-0/+3
As noted here [1], there are potentially future conflicts if we try to use MTD's "partitions" subnode to describe anything besides just the fixed-in-the-device-tree partitions currently described in this document. Particularly, there was a proposal to use this node for the AFS parser too. It can pose a (small) problem to try to differentiate the following nodes: // using binding as currently specified partitions { #address-cells = <x>; #size-cells = <y>; partition@0 { ...; }; }; and // proposed future binding partitions { compatible = "arm,arm-flash-structure"; }; It's especially difficult if other uses of this node start having subnodes. So, since the "partitions" node is new in v4.4, let's fixup the binding before release so that it requires a compatible property, so it's much clearer to distinguish. e.g.: // proposed partitions { compatible = "fixed-partitions"; #address-cells = <x>; #size-cells = <y>; partition@0 { ...; }; }; [1] Subject: "mtd: create a partition type device tree binding" http://lkml.kernel.org/g/[email protected] http://lists.infradead.org/pipermail/linux-mtd/2015-November/063355.html http://lists.infradead.org/pipermail/linux-mtd/2015-November/063364.html Cc: Michal Suchanek <[email protected]> Signed-off-by: Brian Norris <[email protected]> Acked-by: Rob Herring <[email protected]>
2015-12-08mtd: nand: make use of mtd_to_nand() in NAND driversBoris BREZILLON38-276/+276
mtd_to_nand() was recently introduced to avoid direct accesses to the mtd->priv field. Update all NAND drivers to use it. Signed-off-by: Boris Brezillon <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-08staging: mt29f_spinand: make use of mtd_to_nand()Boris BREZILLON1-2/+2
mtd_to_nand() was recently introduced to avoid direct accesses to the mtd->priv field. Use it where appropriate. Signed-off-by: Boris Brezillon <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-08mtd: nand: make use of mtd_to_nand() in NAND core codeBoris BREZILLON5-71/+71
mtd_to_nand() was recently introduced to avoid direct access to the mtd->priv field. Update core code to use mtd_to_nand(). Signed-off-by: Boris Brezillon <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-04mtd: nand: r852: Remove unnecessary synchronize_irq() before free_irq()Lars-Peter Clausen1-1/+0
Calling synchronize_irq() right before free_irq() is quite useless. On one hand the IRQ can easily fire again before free_irq() is entered, on the other hand free_irq() itself calls synchronize_irq() internally (in a race condition free way), before any state associated with the IRQ is freed. Patch was generated using the following semantic patch: // <smpl> @@ expression irq; @@ -synchronize_irq(irq); free_irq(irq, ...); // </smpl> Signed-off-by: Lars-Peter Clausen <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-04mtd: spi-nor: fix error handling in spi_nor_eraseHeiner Kallweit1-6/+2
The documenting comment of mtd_erase in mtdcore.c states: Device drivers are supposed to call instr->callback() whenever the operation completes, even if it completes with a failure. Currently the callback isn't called in case of failure. Fix this. Signed-off-by: Heiner Kallweit <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-04mtd: mtk-quadspi: drop unnecessary .owner assignmentBrian Norris1-1/+0
As of commit 807f16d4db95 ("mtd: core: set some defaults when dev.parent is set"), the MTD core will set this for us. Signed-off-by: Brian Norris <[email protected]> Cc: Bayi Cheng <[email protected]>
2015-12-04mtd: partitions: turn PART() macro into inline functionBrian Norris1-30/+33
We can guard against reorganization of struct mtd_part by using container_of(). We can also make sure we're using the right pointer types by making this a static inline function instead of a macro. Signed-off-by: Brian Norris <[email protected]>
2015-12-03mtd: ofpart: don't complain about missing 'partitions' node too loudlyBrian Norris1-2/+7
The ofpart partition parser might be run on DT-enabled systems that don't have any "ofpart" partition subnodes at all, since "ofpart" is in the default parser list. So don't complain loudly on every boot. Example: using m25p80.c with no intent to use ofpart: &spi2 { status = "okay"; flash@0 { compatible = "jedec,spi-nor"; reg = <0>; }; }; I see this warning: [ 0.588471] m25p80 spi2.0: gd25q32 (4096 Kbytes) [ 0.593091] spi2.0: 'partitions' subnode not found on /spi@ff130000/flash@0. Trying to parse direct subnodes as partitions. Cc: Michal Suchanek <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-01mtd: brcmnand: drop brcmnand_host::of_node fieldBrian Norris1-5/+2
We don't actually need to stash a copy of this device_node indefinitely; we only need it in brcmnand_init_cs(). Signed-off-by: Brian Norris <[email protected]> Cc: <[email protected]> Cc: Kamal Dasu <[email protected]> Acked-by: Scott Branden <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-12-01mtd: spi-nor: Fix error message with unrecognized JEDECRicardo Ribalda1-1/+1
The error message was: m25p80 spi32766.0: unrecognized JEDEC id bytes: 00, 0, 0 The new error message: m25p80 spi32766.0: unrecognized JEDEC id bytes: 00, 00, 00 Signed-off-by: Ricardo Ribalda Delgado <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-30mtd: nand: sunxi: add missing of_node_putJulia Lawall1-1/+3
for_each_child_of_node performs an of_node_get on each iteration, so a break out of the loop requires an of_node_put. A simplified version of the semantic patch that fixes this problem is as follows (http://coccinelle.lip6.fr): // <smpl> @@ expression root,e; local idexpression child; @@ for_each_child_of_node(root, child) { ... when != of_node_put(child) when != e = child ( return child; | + of_node_put(child); ? return ...; ) ... } // </smpl> Signed-off-by: Julia Lawall <[email protected]> Acked-by: Chen-Yu Tsai <[email protected]> Acked-by: Boris Brezillon <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-30mtd: brcmnand: improve memory managementJulia Lawall1-2/+6
This patch addresses two related memory management issues in the probe function: 1. for_each_available_child_of_node performs an of_node_get on each iteration, so a break out of the loop requires an of_node_put. A simplified version of the semantic patch that fixes this problem is as follows (http://coccinelle.lip6.fr): // <smpl> @@ expression root,e; local idexpression child; @@ for_each_available_child_of_node(root, child) { ... when != of_node_put(child) when != e = child ( return child; | + of_node_put(child); ? return ...; ) ... } // </smpl> 2. The devm_kzalloc'd data is not used if brcmnand_init_cs fails. Free it immediately, using devm_kfree in this case, instead of waiting for the remove function. Signed-off-by: Julia Lawall <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-30brcmnand: Clear EXT_ADDR error registers in PIO modeSimon Arlott1-0/+2
If an error occurs in flash above 4GB in PIO mode then the EXT_ADDR registers will be set to the location of the error and never cleared. Reset them to 0 before reading. Signed-off-by: Simon Arlott <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-30mtd: cfi: enforce valid geometry configurationArnd Bergmann1-0/+4
MTD allows compile-time configuration of the possible CFI geometry settings that are allowed by the kernel, but that includes a couple of invalid configurations, where no bank width or no interleave setting is allowed. These are then caught with a compile-time warning: include/linux/mtd/cfi.h:76:2: warning: #warning No CONFIG_MTD_CFI_Ix selected. No NOR chip support can work. include/linux/mtd/map.h:145:2: warning: #warning "No CONFIG_MTD_MAP_BANK_WIDTH_xx selected. No NOR chip support can work" This is a bit annoying for randconfig tests, and can be avoided if we change the Kconfig logic to always select the simplest configuration when no other one is enabled. Signed-off-by: Arnd Bergmann <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-20mtd: mtk-nor: new Mediatek serial flash controller driverBayi Cheng3-0/+494
Add spi nor flash driver for mediatek controller Signed-off-by: Bayi Cheng <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-20mtd: nand: atmel_nand: constify atmel_nand_caps structuresLABBE Corentin1-3/+3
All atmel_nand_caps are never modified, consitify them. Signed-off-by: LABBE Corentin <[email protected]> Acked-by: Josh Wu <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-19mtd: kill off MTD partition parser boilerplateBrian Norris7-80/+5
Most parsers can be handled with our new boilerplate-reducing macro. There are a few that can't be (cmdlineparts and ofpart). Also kill off the owner assignments, since register_mtd_parser() now takes care of that. Signed-off-by: Brian Norris <[email protected]>
2015-11-19mtd: partitions: add module_mtd_part_parser() helperBrian Norris1-2/+6
This can help eliminate some boilerplate by generating the module_init() and module_exit() functions, and by automatically assigning the module owner. Signed-off-by: Brian Norris <[email protected]>
2015-11-19mtd: m25p80: replace leftover "nor-jedec" with "spi-nor" in commentsBrian Norris1-3/+3
I overlooked a few comments in commit 8947e396a829 ("Documentation: dt: mtd: replace "nor-jedec" binding with "jedec, spi-nor""). Fix these up now. Suggested-by: Javier Martinez Canillas <[email protected]> Signed-off-by: Brian Norris <[email protected]> Reviewed-by: Javier Martinez Canillas <[email protected]>
2015-11-19mtd: m25p80: fix module autoloading for "jedec, spi-nor" and "spi-nor"Brian Norris1-1/+10
Commit 43163022927b ("mtd: m25p80: allow arbitrary OF matching for "jedec,spi-nor"") moved the "jedec,spi-nor" handling from the spi_device_id table to the of_match_table, to better handle matching complex device tree compatible strings. With that patch, device tree support works as expected when m25p80.c is built into the kernel. However, that commit ignored the fact that: (1) (non-DT) platform devices might want to use the "spi-nor" string for matching with this driver, rather than picking an arbitrary one like "m25p80" (2) the core SPI uevent/modalias code doesn't yet support kernel module autoloading via of_match_table strings; so for DT-based devices, it will only report (part of) the first compatible string used Problem (1) has been reported previously, and I forgot to patch it up afterward. Problem (2) was noticed recently here: http://lists.infradead.org/pipermail/linux-mtd/2015-October/062369.html https://lkml.org/lkml/2015/11/12/574 Specifically, this patch fixes m25p80.ko module autoloading for cases like this: flash@xxx { compatible = "jedec,spi-nor"; ... }; because modalias of "spi:spi-nor" (the only module loading info provided by the SPI core for this device) will now be listed as an alias in m25p80.ko. Notably, it does *not* help cases like this: flash@xxx { compatible = "vendor,shiny-new-device", "jedec,spi-nor"; ... }; unless we also list "shiny-new-device" in m25p_ids[]. There has been discussion on future work for this issue here: https://lkml.org/lkml/2015/11/12/574 Cc: Heiner Kallweit <[email protected]> Signed-off-by: Brian Norris <[email protected]> Reviewed-by: Javier Martinez Canillas <[email protected]>
2015-11-19mtd: spi-nor: mx25l3205d/mx25l6405d: append SECT_4KAndreas Fenkart1-2/+2
according datasheet both chips can erase 4kByte sectors individually Signed-off-by: Andreas Fenkart <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-19mtd: m25p80: drop erase() callbackBrian Norris1-17/+0
Just use the spi-nor default instead. Signed-off-by: Brian Norris <[email protected]>
2015-11-19mtd: spi-nor: provide default erase_sector implementationBrian Norris1-4/+33
Some spi-nor drivers perform sector erase by duplicating their write_reg() command. Let's not require that the driver fill this out, and provide a default instead. Tested on m25p80.c and Medatek's MT8173 SPI NOR flash driver. Signed-off-by: Brian Norris <[email protected]>
2015-11-19mtd: nand: fix drivers abusing mtd->privBoris BREZILLON2-23/+41
The ->priv field of the mtd_info object attached to a nand_chip device should point to the nand_chip device. The pxa and cafe drivers are assigning this field their own private structure, which works fine as long as the nand_chip field is the first one in the driver private struct but seems a bit fragile. Fix that by setting mtd->priv to point the nand_chip field and assigning chip->priv to the private structure head. Signed-off-by: Boris Brezillon <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-18mtd: brcmnand: drop unused subpage_read() supportBrian Norris1-11/+0
AFAIR this driver was never tested with subpage read support, and this code is currently unused because we don't set the NAND_SUBPAGE_READ flag. It can be resurrected if someone tests it properly. Signed-off-by: Brian Norris <[email protected]> Tested-by: Ray Jui <[email protected]>
2015-11-18mtd: brcmnand: clean up flash cache for parameter pagesBrian Norris1-4/+9
The read_byte() handling for accessing the flash cache has some awkward swapping being done in the read_byte() function. Let's just make this a byte array, and do the swapping with the word-level macros during the initial buffer copy. This is just a refactoring patch, with no (intended) functional change. Signed-off-by: Brian Norris <[email protected]> Cc: Clay McClure <[email protected]> Cc: Ray Jui <[email protected]> Cc: Scott Branden <[email protected]> Cc: <[email protected]> Tested-by: Clay McClure <[email protected]>
2015-11-18mtd: fsl-quadspi: possible NULL dereferenceBrian Norris1-4/+4
It is theoretically possible to probe this driver without a matching device tree, so let's guard against this. Also, use the of_device_get_match_data() helper to make this a bit simpler. Coverity complained about this one. Signed-off-by: Brian Norris <[email protected]> Acked-by: Han xu <[email protected]>
2015-11-17mtd: mxc_nand: Remove bit-or operation with zeroFabio Estevam1-2/+1
Doing a bit-or operation with zero is pointless. Remove this unneeded bit-or. Signed-off-by: Fabio Estevam <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-16mtd: spi-nor: remove unnecessary leading space from dbg printBrian Norris1-1/+1
As Cyrille noted [1], this line is wrong. [1] http://lists.infradead.org/pipermail/linux-mtd/2015-September/061725.html Signed-off-by: Brian Norris <[email protected]> Cc: Cyrille Pitchen <[email protected]>
2015-11-16mtd: sm_ftl: fix wrong do_div() usageNicolas Pitre1-1/+2
do_div() is meant to be used with an unsigned dividend. Signed-off-by: Nicolas Pitre <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-16mtd: pxa3xx_nand: Gate/ungate the NAND clock in suspend/resume pathsEzequiel García1-0/+6
The NAND clock can be disabled on suspend and enabled on resume. Signed-off-by: Ezequiel Garcia <[email protected]> Acked-by: Robert Jarzmik <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-16mtd: pxa3xx_nand: Remove dead codeEzequiel García1-5/+0
This macro is not used anymore, so it's just dead code. Remove it. Signed-off-by: Ezequiel Garcia <[email protected]> Acked-by: Robert Jarzmik <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-16mtd: pxa3xx_nand: Remove redundant NAND sensingEzequiel García1-33/+8
Currently, the driver is trying to detect the presence of a chip by issuing a RESET command before nand_scan_ident. This seems completely redundant, and is also a layering violation as nand_scan_ident is in charge of device detection. This commit removes the RESET command use, and moves the initial timing configuration to pxa3xx_nand_config_ident. Signed-off-by: Ezequiel Garcia <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-16mtd: pxa3xx_nand: Simplify pxa3xx_nand_scanEzequiel García1-16/+14
This commit simplifies the initial configuration performed by pxa3xx_nand_scan. No functionality change is intended. Signed-off-by: Ezequiel Garcia <[email protected]> Acked-by: Robert Jarzmik <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-16mtd: pxa3xx_nand: Fix initial controller configurationEzequiel García1-13/+22
The Data Flash Control Register (NDCR) contains two types of parameters: those that are needed for device identification, and those that can only be set after device identification. Therefore, the driver can't set them all at once and instead needs to configure the first group before nand_scan_ident() and the second group later. Let's split pxa3xx_nand_config in two halves, and set the parameters that depend on the device geometry once this is known. Signed-off-by: Ezequiel Garcia <[email protected]> Signed-off-by: Brian Norris <[email protected]>
2015-11-16mtd: pxa3xx_nand: Increase the initial chunk sizeEzequiel García1-1/+1
The chunk size represents the size of the data chunks, which is used by the controllers that allow to split transfered data. However, the initial chunk size is used in a non-splitted way, during device identification. Therefore, it must be large enough for all the NAND commands issued during device identification. This includes NAND_CMD_PARAM which was recently changed to transfer up to 2048 bytes (for the redundant parameter pages). Thus, the initial chunk size should be 2048 as well. On Armada 370/XP platforms (NFCv2) booted without the keep-config devicetree property, this commit fixes a timeout on the NAND_CMD_PARAM command: [..] pxa3xx-nand f10d0000.nand: This platform can't do DMA on this device pxa3xx-nand f10d0000.nand: Wait time out!!! nand: device found, Manufacturer ID: 0x2c, Chip ID: 0x38 nand: Micron MT29F8G08ABABAWP nand: 1024 MiB, SLC, erase size: 512 KiB, page size: 4096, OOB size: 224 Signed-off-by: Ezequiel Garcia <[email protected]> Acked-by: Robert Jarzmik <[email protected]> Signed-off-by: Brian Norris <[email protected]>