mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-29 09:12:07 +00:00
* MTD
Simon Glass wanted to support binman's output properties in order to check their validity using the binding checks and proposed changes with the missing properties as well as a binman compatible. Krzysztof Kozlowski on his side shared a new yaml for describing Samsung's OneNAND interface. The interface with NVMEM has also been slightly improved/fixed, especially now that OTP are also supported in the NAND subsystem. Along with these changes, small cleanups have also been contributed around ID tables, structure sizes, arithmetic checks and comments. * Raw NAND subsystem Two small fixes, one in the Hynix vendor code for properly returning an error which might have been ignored and another in the Davinci driver to properly synchronize the controller with the gpio domain. * SPI NOR subsystem SPI NOR now uses div_u64() instead of div64_u64() in places where the divisor is 32 bits. Many 32 bit architectures can optimize this variant better than a full 64 bit divide. -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEE9HuaYnbmDhq/XIDIJWrqGEe9VoQFAmZFzEwACgkQJWrqGEe9 VoRNZwf/dTvWM2r/tLPkXJ4lDdZUMJO2Z5YebSwcUWTJ8P4yhoGfxDwgEiWaaauF Z++MdSBEK3C9us19ro+YCFidq7T+m1PcekHLa1Zckcy2NOLFyRT7O5j16CEQKHlj a/9WfZ37TIaWelZDXnm6nWyTxsDFp5h9IOsG32/SckBFm/TU0+G2MCKz7HvJ6DRg /K6Yu+3KpxhO0D3PhTm5+Fi7UhBPABKfvBYrLFiYnuMi3d0L6/75wxj8dje7iW+Q 9WusrjKvhf3ffp9715RxjDQdMA1MIa/ok7tIlTQXyBfDM1xZkr6MDNeDJfd2FU7J 2hk/ga7A/zigKJ37ftw/34YZJK6xmw== =AtHp -----END PGP SIGNATURE----- Merge tag 'mtd/for-6.10' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux Pull MTD updates from Miquel Raynal: "MTD: - Simon Glass wanted to support binman's output properties in order to check their validity using the binding checks and proposed changes with the missing properties as well as a binman compatible. - Krzysztof Kozlowski on his side shared a new yaml for describing Samsung's OneNAND interface. - The interface with NVMEM has also been slightly improved/fixed, especially now that OTP are also supported in the NAND subsystem. - Along with these changes, small cleanups have also been contributed around ID tables, structure sizes, arithmetic checks and comments. Raw NAND subsystem: - Two small fixes, one in the Hynix vendor code for properly returning an error which might have been ignored and another in the Davinci driver to properly synchronize the controller with the gpio domain. SPI NOR subsystem: - SPI NOR now uses div_u64() instead of div64_u64() in places where the divisor is 32 bits. Many 32 bit architectures can optimize this variant better than a full 64 bit divide" * tag 'mtd/for-6.10' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux: mtd: spi-nor: replace unnecessary div64_u64() with div_u64() mtd: mchp23k256: drop unneeded MODULE_ALIAS dt-bindings: mtd: fixed-partition: Add binman compatibles dt-bindings: mtd: fixed-partitions: Add alignment properties mtd: maps: sa1100-flash: Prefer struct_size over open coded arithmetic mtd: core: Align comment with an action in mtd_otp_nvmem_add() mtd: rawnand: hynix: fixed typo mtd: rawnand: davinci: Add dummy read after sending command mtd: partitions: redboot: Added conversion of operands to a larger type dt-bindings: mtd: Add Samsung S5Pv210 OneNAND mtd: core: Don't fail mtd_otp_nvmem_add() if OTP is unsupported mtd: core: Report error if first mtd_otp_size() call fails in mtd_otp_nvmem_add()
This commit is contained in:
commit
b426433c03
53
Documentation/devicetree/bindings/mtd/partitions/binman.yaml
Normal file
53
Documentation/devicetree/bindings/mtd/partitions/binman.yaml
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/mtd/partitions/binman.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Binman entries
|
||||||
|
|
||||||
|
description: |
|
||||||
|
This corresponds to a binman 'entry'. It is a single partition which holds
|
||||||
|
data of a defined type.
|
||||||
|
|
||||||
|
Binman uses the type to indicate what data file / type to place in the
|
||||||
|
partition. There are quite a number of binman-specific entry types, such as
|
||||||
|
section, fill and files, to be added later.
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Simon Glass <sjg@chromium.org>
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/mtd/partitions/partition.yaml#
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
enum:
|
||||||
|
- u-boot # u-boot.bin from U-Boot project
|
||||||
|
- tfa-bl31 # bl31.bin or bl31.elf from TF-A project
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
partitions {
|
||||||
|
compatible = "fixed-partitions";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
partition@100000 {
|
||||||
|
compatible = "u-boot";
|
||||||
|
reg = <0x100000 0xf00000>;
|
||||||
|
align-size = <0x1000>;
|
||||||
|
align-end = <0x10000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@200000 {
|
||||||
|
compatible = "tfa-bl31";
|
||||||
|
reg = <0x200000 0x100000>;
|
||||||
|
align = <0x4000>;
|
||||||
|
};
|
||||||
|
};
|
@ -57,6 +57,57 @@ properties:
|
|||||||
user space from
|
user space from
|
||||||
type: boolean
|
type: boolean
|
||||||
|
|
||||||
|
align:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
minimum: 2
|
||||||
|
maximum: 0x80000000
|
||||||
|
multipleOf: 2
|
||||||
|
description:
|
||||||
|
This sets the alignment of the entry in bytes.
|
||||||
|
|
||||||
|
The entry offset is adjusted so that the entry starts on an aligned
|
||||||
|
boundary within the containing section or image. For example ‘align =
|
||||||
|
<16>’ means that the entry will start on a 16-byte boundary. This may
|
||||||
|
mean that padding is added before the entry. The padding is part of
|
||||||
|
the containing section but is not included in the entry, meaning that
|
||||||
|
an empty space may be created before the entry starts. Alignment
|
||||||
|
must be a power of 2. If ‘align’ is not provided, no alignment is
|
||||||
|
performed.
|
||||||
|
|
||||||
|
align-size:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
minimum: 2
|
||||||
|
maximum: 0x80000000
|
||||||
|
multipleOf: 2
|
||||||
|
description:
|
||||||
|
This sets the alignment of the entry size in bytes. It must be a power
|
||||||
|
of 2.
|
||||||
|
|
||||||
|
For example, to ensure that the size of an entry is a multiple of 64
|
||||||
|
bytes, set this to 64. While this does not affect the content of the
|
||||||
|
entry itself (the padding is performed only when its parent section is
|
||||||
|
assembled), the end result is that the entry ends with the padding
|
||||||
|
bytes, so may grow. If ‘align-size’ is not provided, no alignment is
|
||||||
|
performed.
|
||||||
|
|
||||||
|
align-end:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
minimum: 2
|
||||||
|
maximum: 0x80000000
|
||||||
|
multipleOf: 2
|
||||||
|
description:
|
||||||
|
This sets the alignment (in bytes) of the end of an entry with respect
|
||||||
|
to the containing section. It must be a power of 2.
|
||||||
|
|
||||||
|
Some entries require that they end on an alignment boundary,
|
||||||
|
regardless of where they start. This does not move the start of the
|
||||||
|
entry, so the content of the entry will still start at the beginning.
|
||||||
|
But there may be padding at the end. While this does not affect the
|
||||||
|
content of the entry itself (the padding is performed only when its
|
||||||
|
parent section is assembled), the end result is that the entry ends
|
||||||
|
with the padding bytes, so may grow. If ‘align-end’ is not provided,
|
||||||
|
no alignment is performed.
|
||||||
|
|
||||||
if:
|
if:
|
||||||
not:
|
not:
|
||||||
required: [ reg ]
|
required: [ reg ]
|
||||||
@ -67,3 +118,24 @@ then:
|
|||||||
|
|
||||||
# This is a generic file other binding inherit from and extend
|
# This is a generic file other binding inherit from and extend
|
||||||
additionalProperties: true
|
additionalProperties: true
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
partitions {
|
||||||
|
compatible = "fixed-partitions";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
partition@100000 {
|
||||||
|
compatible = "u-boot";
|
||||||
|
reg = <0x100000 0xf00000>;
|
||||||
|
align-size = <0x1000>;
|
||||||
|
align-end = <0x10000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@200000 {
|
||||||
|
compatible = "tfa-bl31";
|
||||||
|
reg = <0x200000 0x100000>;
|
||||||
|
align = <0x4000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/mtd/samsung,s5pv210-onenand.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Samsung S5Pv210 SoC OneNAND Controller
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Krzysztof Kozlowski <krzk@kernel.org>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
enum:
|
||||||
|
- samsung,s5pv210-onenand
|
||||||
|
|
||||||
|
reg:
|
||||||
|
items:
|
||||||
|
- description: Control registers
|
||||||
|
- description: OneNAND interface nCE[0]
|
||||||
|
- description: OneNAND interface nCE[1]
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
maxItems: 2
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: bus
|
||||||
|
- const: onenand
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- interrupts
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: nand-controller.yaml
|
||||||
|
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/clock/s5pv210.h>
|
||||||
|
|
||||||
|
nand-controller@b0600000 {
|
||||||
|
compatible = "samsung,s5pv210-onenand";
|
||||||
|
reg = <0xb0600000 0x2000>,
|
||||||
|
<0xb0000000 0x20000>,
|
||||||
|
<0xb0040000 0x20000>;
|
||||||
|
clocks = <&clocks CLK_NANDXL>, <&clocks DOUT_FLASH>;
|
||||||
|
clock-names = "bus", "onenand";
|
||||||
|
interrupt-parent = <&vic1>;
|
||||||
|
interrupts = <31>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
nand@0 {
|
||||||
|
reg = <0>;
|
||||||
|
};
|
||||||
|
};
|
@ -3671,6 +3671,11 @@ F: Documentation/filesystems/bfs.rst
|
|||||||
F: fs/bfs/
|
F: fs/bfs/
|
||||||
F: include/uapi/linux/bfs_fs.h
|
F: include/uapi/linux/bfs_fs.h
|
||||||
|
|
||||||
|
BINMAN
|
||||||
|
M: Simon Glass <sjg@chromium.org>
|
||||||
|
S: Supported
|
||||||
|
F: Documentation/devicetree/bindings/mtd/partitions/binman*
|
||||||
|
|
||||||
BITMAP API
|
BITMAP API
|
||||||
M: Yury Norov <yury.norov@gmail.com>
|
M: Yury Norov <yury.norov@gmail.com>
|
||||||
R: Rasmus Villemoes <linux@rasmusvillemoes.dk>
|
R: Rasmus Villemoes <linux@rasmusvillemoes.dk>
|
||||||
|
@ -257,4 +257,3 @@ module_spi_driver(mchp23k256_driver);
|
|||||||
MODULE_DESCRIPTION("MTD SPI driver for MCHP23K256 RAM chips");
|
MODULE_DESCRIPTION("MTD SPI driver for MCHP23K256 RAM chips");
|
||||||
MODULE_AUTHOR("Andrew Lunn <andre@lunn.ch>");
|
MODULE_AUTHOR("Andrew Lunn <andre@lunn.ch>");
|
||||||
MODULE_LICENSE("GPL v2");
|
MODULE_LICENSE("GPL v2");
|
||||||
MODULE_ALIAS("spi:mchp23k256");
|
|
||||||
|
@ -153,7 +153,7 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev,
|
|||||||
struct flash_platform_data *plat)
|
struct flash_platform_data *plat)
|
||||||
{
|
{
|
||||||
struct sa_info *info;
|
struct sa_info *info;
|
||||||
int nr, size, i, ret = 0;
|
int nr, i, ret = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Count number of devices.
|
* Count number of devices.
|
||||||
@ -167,12 +167,10 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
size = sizeof(struct sa_info) + sizeof(struct sa_subdev_info) * nr;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allocate the map_info structs in one go.
|
* Allocate the map_info structs in one go.
|
||||||
*/
|
*/
|
||||||
info = kzalloc(size, GFP_KERNEL);
|
info = kzalloc(struct_size(info, subdev, nr), GFP_KERNEL);
|
||||||
if (!info) {
|
if (!info) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -956,8 +956,10 @@ static int mtd_otp_nvmem_add(struct mtd_info *mtd)
|
|||||||
|
|
||||||
if (mtd->_get_user_prot_info && mtd->_read_user_prot_reg) {
|
if (mtd->_get_user_prot_info && mtd->_read_user_prot_reg) {
|
||||||
size = mtd_otp_size(mtd, true);
|
size = mtd_otp_size(mtd, true);
|
||||||
if (size < 0)
|
if (size < 0) {
|
||||||
return size;
|
err = size;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
if (size > 0) {
|
if (size > 0) {
|
||||||
nvmem = mtd_otp_nvmem_register(mtd, "user-otp", size,
|
nvmem = mtd_otp_nvmem_register(mtd, "user-otp", size,
|
||||||
@ -1012,6 +1014,9 @@ static int mtd_otp_nvmem_add(struct mtd_info *mtd)
|
|||||||
|
|
||||||
err:
|
err:
|
||||||
nvmem_unregister(mtd->otp_user_nvmem);
|
nvmem_unregister(mtd->otp_user_nvmem);
|
||||||
|
/* Don't report error if OTP is not supported. */
|
||||||
|
if (err == -EOPNOTSUPP)
|
||||||
|
return 0;
|
||||||
return dev_err_probe(dev, err, "Failed to register OTP NVMEM device\n");
|
return dev_err_probe(dev, err, "Failed to register OTP NVMEM device\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -671,8 +671,11 @@ static int davinci_nand_exec_instr(struct davinci_nand_info *info,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (instr->delay_ns)
|
if (instr->delay_ns) {
|
||||||
|
/* Dummy read to be sure that command is sent before ndelay starts */
|
||||||
|
davinci_nand_readl(info, 0);
|
||||||
ndelay(instr->delay_ns);
|
ndelay(instr->delay_ns);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -401,7 +401,7 @@ static int hynix_nand_rr_init(struct nand_chip *chip)
|
|||||||
if (ret)
|
if (ret)
|
||||||
pr_warn("failed to initialize read-retry infrastructure");
|
pr_warn("failed to initialize read-retry infrastructure");
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hynix_nand_extract_oobsize(struct nand_chip *chip,
|
static void hynix_nand_extract_oobsize(struct nand_chip *chip,
|
||||||
|
@ -102,7 +102,7 @@ static int parse_redboot_partitions(struct mtd_info *master,
|
|||||||
offset -= master->erasesize;
|
offset -= master->erasesize;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
offset = directory * master->erasesize;
|
offset = (unsigned long) directory * master->erasesize;
|
||||||
while (mtd_block_isbad(master, offset)) {
|
while (mtd_block_isbad(master, offset)) {
|
||||||
offset += master->erasesize;
|
offset += master->erasesize;
|
||||||
if (offset == master->size)
|
if (offset == master->size)
|
||||||
|
@ -2893,7 +2893,7 @@ static int spi_nor_late_init_params(struct spi_nor *nor)
|
|||||||
spi_nor_init_default_locking_ops(nor);
|
spi_nor_init_default_locking_ops(nor);
|
||||||
|
|
||||||
if (params->n_banks > 1)
|
if (params->n_banks > 1)
|
||||||
params->bank_size = div64_u64(params->size, params->n_banks);
|
params->bank_size = div_u64(params->size, params->n_banks);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -3406,7 +3406,7 @@ static int spi_nor_set_mtd_eraseregions(struct spi_nor *nor)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
mtd_region[i].erasesize = erasesize;
|
mtd_region[i].erasesize = erasesize;
|
||||||
mtd_region[i].numblocks = div64_ul(region[i].size, erasesize);
|
mtd_region[i].numblocks = div_u64(region[i].size, erasesize);
|
||||||
mtd_region[i].offset = region[i].offset;
|
mtd_region[i].offset = region[i].offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user