Age | Commit message (Collapse) | Author | Files | Lines |
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
A few MAINTAINERS updates, and some DT binding/documentation fixups.
Signed-off-by: Brian Norris <[email protected]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
Add spi nor flash driver for mediatek controller
Signed-off-by: Bayi Cheng <[email protected]>
Signed-off-by: Brian Norris <[email protected]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
according datasheet both chips can erase 4kByte sectors individually
Signed-off-by: Andreas Fenkart <[email protected]>
Signed-off-by: Brian Norris <[email protected]>
|
|
Just use the spi-nor default instead.
Signed-off-by: Brian Norris <[email protected]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|
|
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]>
|