mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 'mtd/for-6.6' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux
Pull MTD updates from Miquel Raynal: "Core MTD changes: - Use refcount to prevent corruption - Call external _get and _put in right order - Fix use-after-free in mtd release - Explicitly include correct DT includes - Clean refcounting with MTD_PARTITIONED_MASTER - mtdblock: make warning messages ratelimited - dt-bindings: Add SEAMA partition bindings Device driver changes: - Use devm helper functions - Fix questionable cast, remove pointless ones. - error handling fixes - add support for new chip versions - update DT bindings - misc cleanups - fix typos, whitespace, indentation" * tag 'mtd/for-6.6' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux: (105 commits) dt-bindings: mtd: amlogic,meson-nand: drop unneeded quotes mtd: spear_smi: Use helper function devm_clk_get_enabled() mtd: rawnand: orion: Use helper function devm_clk_get_optional_enabled() mtd: rawnand: vf610_nfc: Use helper function devm_clk_get_enabled() mtd: rawnand: sunxi: Use helper function devm_clk_get_enabled() mtd: rawnand: stm32_fmc2: Use helper function devm_clk_get_enabled() mtd: rawnand: mtk: Use helper function devm_clk_get_enabled() mtd: rawnand: mpc5121: Use helper function devm_clk_get_enabled() mtd: rawnand: lpc32xx_slc: Use helper function devm_clk_get_enabled() mtd: rawnand: intel: Use helper function devm_clk_get_enabled() mtd: rawnand: fsmc: Use helper function devm_clk_get_enabled() mtd: rawnand: arasan: Use helper function devm_clk_get_enabled() mtd: rawnand: qcom: Add read/read_start ops in exec_op path mtd: rawnand: qcom: Clear buf_count and buf_start in raw read mtd: maps: fix -Wvoid-pointer-to-enum-cast warning mtd: rawnand: fix -Wvoid-pointer-to-enum-cast warning mtd: rawnand: fsmc: handle clk prepare error in fsmc_nand_resume() mtd: rawnand: Propagate error and simplify ternary operators for brcmstb_nand_wait_for_completion() mtd: rawnand: qcom: Sort includes alphabetically mtd: rawnand: qcom: Do not override the error no of submit_descs() ...
This commit is contained in:
@@ -50,7 +50,7 @@ patternProperties:
|
||||
const: hw
|
||||
|
||||
nand-ecc-step-size:
|
||||
const: 1024
|
||||
enum: [512, 1024]
|
||||
|
||||
nand-ecc-strength:
|
||||
enum: [8, 16, 24, 30, 40, 50, 60]
|
||||
@@ -66,6 +66,10 @@ patternProperties:
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
dependencies:
|
||||
nand-ecc-strength: [nand-ecc-step-size]
|
||||
nand-ecc-step-size: [nand-ecc-strength]
|
||||
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
@@ -43,8 +43,10 @@ properties:
|
||||
- const: jedec,spi-nor
|
||||
- const: jedec,spi-nor
|
||||
description:
|
||||
Must also include "jedec,spi-nor" for any SPI NOR flash that can be
|
||||
identified by the JEDEC READ ID opcode (0x9F).
|
||||
SPI NOR flashes compatible with the JEDEC SFDP standard or which may be
|
||||
identified with the READ ID opcode (0x9F) do not deserve a specific
|
||||
compatible. They should instead only be matched against the generic
|
||||
"jedec,spi-nor" compatible.
|
||||
|
||||
reg:
|
||||
minItems: 1
|
||||
@@ -70,6 +72,21 @@ properties:
|
||||
be used on such systems, to denote the absence of a reliable reset
|
||||
mechanism.
|
||||
|
||||
no-wp:
|
||||
type: boolean
|
||||
description:
|
||||
The status register write disable (SRWD) bit in status register, combined
|
||||
with the WP# signal, provides hardware data protection for the device. When
|
||||
the SRWD bit is set to 1, and the WP# signal is either driven LOW or hard
|
||||
strapped to LOW, the status register nonvolatile bits become read-only and
|
||||
the WRITE STATUS REGISTER operation will not execute. The only way to exit
|
||||
this hardware-protected mode is to drive WP# HIGH. If the WP# signal of the
|
||||
flash device is not connected or is wrongly tied to GND (that includes internal
|
||||
pull-downs) then status register permanently becomes read-only as the SRWD bit
|
||||
cannot be reset. This boolean flag can be used on such systems to avoid setting
|
||||
the SRWD bit while writing the status register. WP# signal hard strapped to GND
|
||||
can be a valid use case.
|
||||
|
||||
reset-gpios:
|
||||
description:
|
||||
A GPIO line connected to the RESET (active low) signal of the device.
|
||||
|
||||
@@ -16,6 +16,7 @@ properties:
|
||||
- const: marvell,armada-8k-nand-controller
|
||||
- const: marvell,armada370-nand-controller
|
||||
- enum:
|
||||
- marvell,ac5-nand-controller
|
||||
- marvell,armada370-nand-controller
|
||||
- marvell,pxa3xx-nand-controller
|
||||
- description: legacy bindings
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/mtd/nand-controller.yaml#
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
* Oxford Semiconductor OXNAS NAND Controller
|
||||
|
||||
Please refer to nand-controller.yaml for generic information regarding MTD NAND bindings.
|
||||
|
||||
Required properties:
|
||||
- compatible: "oxsemi,ox820-nand"
|
||||
- reg: Base address and length for NAND mapped memory.
|
||||
|
||||
Optional Properties:
|
||||
- clocks: phandle to the NAND gate clock if needed.
|
||||
- resets: phandle to the NAND reset control if needed.
|
||||
|
||||
Example:
|
||||
|
||||
nandc: nand-controller@41000000 {
|
||||
compatible = "oxsemi,ox820-nand";
|
||||
reg = <0x41000000 0x100000>;
|
||||
clocks = <&stdclk CLK_820_NAND>;
|
||||
resets = <&reset RESET_NAND>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
nand@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-ecc-algo = "hamming";
|
||||
|
||||
partition@0 {
|
||||
label = "boot";
|
||||
reg = <0x00000000 0x00e00000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@e00000 {
|
||||
label = "ubi";
|
||||
reg = <0x00e00000 0x07200000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,44 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/mtd/partitions/seama.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Seattle Image Partitions
|
||||
|
||||
description: The SEAttle iMAge (SEAMA) partition is a type of partition
|
||||
used for NAND flash devices. This type of flash image is found in some
|
||||
D-Link routers such as DIR-645, DIR-842, DIR-859, DIR-860L, DIR-885L,
|
||||
DIR890L and DCH-M225, as well as in WD and NEC routers on the ath79
|
||||
(MIPS), Broadcom BCM53xx, and RAMIPS platforms. This partition type
|
||||
does not have children defined in the device tree, they need to be
|
||||
detected by software.
|
||||
|
||||
allOf:
|
||||
- $ref: partition.yaml#
|
||||
|
||||
maintainers:
|
||||
- Linus Walleij <linus.walleij@linaro.org>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: seama
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
compatible = "seama";
|
||||
reg = <0x0 0x800000>;
|
||||
label = "firmware";
|
||||
};
|
||||
};
|
||||
@@ -1599,7 +1599,7 @@ static void doc_unregister_sysfs(struct platform_device *pdev,
|
||||
*/
|
||||
static int flashcontrol_show(struct seq_file *s, void *p)
|
||||
{
|
||||
struct docg3 *docg3 = (struct docg3 *)s->private;
|
||||
struct docg3 *docg3 = s->private;
|
||||
|
||||
u8 fctrl;
|
||||
|
||||
@@ -1621,7 +1621,7 @@ DEFINE_SHOW_ATTRIBUTE(flashcontrol);
|
||||
|
||||
static int asic_mode_show(struct seq_file *s, void *p)
|
||||
{
|
||||
struct docg3 *docg3 = (struct docg3 *)s->private;
|
||||
struct docg3 *docg3 = s->private;
|
||||
|
||||
int pctrl, mode;
|
||||
|
||||
@@ -1658,7 +1658,7 @@ DEFINE_SHOW_ATTRIBUTE(asic_mode);
|
||||
|
||||
static int device_id_show(struct seq_file *s, void *p)
|
||||
{
|
||||
struct docg3 *docg3 = (struct docg3 *)s->private;
|
||||
struct docg3 *docg3 = s->private;
|
||||
int id;
|
||||
|
||||
mutex_lock(&docg3->cascade->lock);
|
||||
@@ -1672,7 +1672,7 @@ DEFINE_SHOW_ATTRIBUTE(device_id);
|
||||
|
||||
static int protection_show(struct seq_file *s, void *p)
|
||||
{
|
||||
struct docg3 *docg3 = (struct docg3 *)s->private;
|
||||
struct docg3 *docg3 = s->private;
|
||||
int protect, dps0, dps0_low, dps0_high, dps1, dps1_low, dps1_high;
|
||||
|
||||
mutex_lock(&docg3->cascade->lock);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#include <linux/sizes.h>
|
||||
#include <linux/spi/flash.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#define MAX_CMD_SIZE 4
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include <linux/sizes.h>
|
||||
#include <linux/spi/flash.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
struct mchp48_caps {
|
||||
unsigned int size;
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/math64.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/flash.h>
|
||||
|
||||
@@ -937,7 +937,6 @@ static int spear_smi_probe(struct platform_device *pdev)
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct spear_smi_plat_data *pdata = NULL;
|
||||
struct spear_smi *dev;
|
||||
struct resource *smi_base;
|
||||
int irq, ret = 0;
|
||||
int i;
|
||||
|
||||
@@ -975,9 +974,7 @@ static int spear_smi_probe(struct platform_device *pdev)
|
||||
goto err;
|
||||
}
|
||||
|
||||
smi_base = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
|
||||
dev->io_base = devm_ioremap_resource(&pdev->dev, smi_base);
|
||||
dev->io_base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(dev->io_base)) {
|
||||
ret = PTR_ERR(dev->io_base);
|
||||
goto err;
|
||||
@@ -996,21 +993,17 @@ static int spear_smi_probe(struct platform_device *pdev)
|
||||
dev->num_flashes = MAX_NUM_FLASH_CHIP;
|
||||
}
|
||||
|
||||
dev->clk = devm_clk_get(&pdev->dev, NULL);
|
||||
dev->clk = devm_clk_get_enabled(&pdev->dev, NULL);
|
||||
if (IS_ERR(dev->clk)) {
|
||||
ret = PTR_ERR(dev->clk);
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = clk_prepare_enable(dev->clk);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
ret = devm_request_irq(&pdev->dev, irq, spear_smi_int_handler, 0,
|
||||
pdev->name, dev);
|
||||
if (ret) {
|
||||
dev_err(&dev->pdev->dev, "SMI IRQ allocation failed\n");
|
||||
goto err_irq;
|
||||
goto err;
|
||||
}
|
||||
|
||||
mutex_init(&dev->lock);
|
||||
@@ -1023,14 +1016,11 @@ static int spear_smi_probe(struct platform_device *pdev)
|
||||
ret = spear_smi_setup_banks(pdev, i, pdata->np[i]);
|
||||
if (ret) {
|
||||
dev_err(&dev->pdev->dev, "bank setup failed\n");
|
||||
goto err_irq;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_irq:
|
||||
clk_disable_unprepare(dev->clk);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
@@ -1059,8 +1049,6 @@ static int spear_smi_remove(struct platform_device *pdev)
|
||||
WARN_ON(mtd_device_unregister(&flash->mtd));
|
||||
}
|
||||
|
||||
clk_disable_unprepare(dev->clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -2016,7 +2016,6 @@ static int stfsm_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct flash_info *info;
|
||||
struct resource *res;
|
||||
struct stfsm *fsm;
|
||||
int ret;
|
||||
|
||||
@@ -2033,18 +2032,9 @@ static int stfsm_probe(struct platform_device *pdev)
|
||||
|
||||
platform_set_drvdata(pdev, fsm);
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
dev_err(&pdev->dev, "Resource not found\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
fsm->base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(fsm->base)) {
|
||||
dev_err(&pdev->dev,
|
||||
"Failed to reserve memory region %pR\n", res);
|
||||
fsm->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(fsm->base))
|
||||
return PTR_ERR(fsm->base);
|
||||
}
|
||||
|
||||
fsm->clk = devm_clk_get_enabled(&pdev->dev, NULL);
|
||||
if (IS_ERR(fsm->clk)) {
|
||||
|
||||
@@ -412,7 +412,6 @@ static int lpddr2_nvm_probe(struct platform_device *pdev)
|
||||
struct map_info *map;
|
||||
struct mtd_info *mtd;
|
||||
struct resource *add_range;
|
||||
struct resource *control_regs;
|
||||
struct pcm_int_data *pcm_data;
|
||||
|
||||
/* Allocate memory control_regs data structures */
|
||||
@@ -452,8 +451,7 @@ static int lpddr2_nvm_probe(struct platform_device *pdev)
|
||||
|
||||
simple_map_init(map); /* fill with default methods */
|
||||
|
||||
control_regs = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
pcm_data->ctl_regs = devm_ioremap_resource(&pdev->dev, control_regs);
|
||||
pcm_data->ctl_regs = devm_platform_ioremap_resource(pdev, 1);
|
||||
if (IS_ERR(pcm_data->ctl_regs))
|
||||
return PTR_ERR(pcm_data->ctl_regs);
|
||||
|
||||
|
||||
@@ -118,11 +118,9 @@ ltq_mtd_probe(struct platform_device *pdev)
|
||||
|
||||
platform_set_drvdata(pdev, ltq_mtd);
|
||||
|
||||
ltq_mtd->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!ltq_mtd->res) {
|
||||
dev_err(&pdev->dev, "failed to get memory resource\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
ltq_mtd->map->virt = devm_platform_get_and_ioremap_resource(pdev, 0, <q_mtd->res);
|
||||
if (IS_ERR(ltq_mtd->map->virt))
|
||||
return PTR_ERR(ltq_mtd->map->virt);
|
||||
|
||||
ltq_mtd->map = devm_kzalloc(&pdev->dev, sizeof(struct map_info),
|
||||
GFP_KERNEL);
|
||||
@@ -131,9 +129,6 @@ ltq_mtd_probe(struct platform_device *pdev)
|
||||
|
||||
ltq_mtd->map->phys = ltq_mtd->res->start;
|
||||
ltq_mtd->map->size = resource_size(ltq_mtd->res);
|
||||
ltq_mtd->map->virt = devm_ioremap_resource(&pdev->dev, ltq_mtd->res);
|
||||
if (IS_ERR(ltq_mtd->map->virt))
|
||||
return PTR_ERR(ltq_mtd->map->virt);
|
||||
|
||||
ltq_mtd->map->name = ltq_map_name;
|
||||
ltq_mtd->map->bankwidth = 2;
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
#include <linux/mtd/xip.h>
|
||||
#include <linux/mux/consumer.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
@@ -508,8 +508,7 @@ static int physmap_flash_probe(struct platform_device *dev)
|
||||
for (i = 0; i < info->nmaps; i++) {
|
||||
struct resource *res;
|
||||
|
||||
res = platform_get_resource(dev, IORESOURCE_MEM, i);
|
||||
info->maps[i].virt = devm_ioremap_resource(&dev->dev, res);
|
||||
info->maps[i].virt = devm_platform_get_and_ioremap_resource(dev, i, &res);
|
||||
if (IS_ERR(info->maps[i].virt)) {
|
||||
err = PTR_ERR(info->maps[i].virt);
|
||||
goto err_out;
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
*/
|
||||
#include <linux/export.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/mtd/map.h>
|
||||
#include <linux/mtd/xip.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
#include <linux/export.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/map.h>
|
||||
#include <linux/mtd/xip.h>
|
||||
#include "physmap-ixp4xx.h"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/map.h>
|
||||
|
||||
#ifdef CONFIG_MTD_PHYSMAP_IXP4XX
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
#include <linux/io.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/mtd/map.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/bitops.h>
|
||||
#include "physmap-versatile.h"
|
||||
@@ -206,7 +206,7 @@ int of_flash_probe_versatile(struct platform_device *pdev,
|
||||
if (!sysnp)
|
||||
return -ENODEV;
|
||||
|
||||
versatile_flashprot = (enum versatile_flashprot)devid->data;
|
||||
versatile_flashprot = (uintptr_t)devid->data;
|
||||
rmap = syscon_node_to_regmap(sysnp);
|
||||
of_node_put(sysnp);
|
||||
if (IS_ERR(rmap))
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user