Lines Matching +full:socfpga +full:- +full:denali +full:- +full:nand

1 // SPDX-License-Identifier: GPL-2.0
3 * NAND Flash Controller Device Driver for DT
19 #include "denali.h"
66 .compatible = "altr,socfpga-denali-nand",
70 .compatible = "socionext,uniphier-denali-nand-v5a",
74 .compatible = "socionext,uniphier-denali-nand-v5b",
81 static int denali_dt_chip_init(struct denali_controller *denali, in denali_dt_chip_init() argument
92 dchip = devm_kzalloc(denali->dev, struct_size(dchip, sels, nsels), in denali_dt_chip_init()
95 return -ENOMEM; in denali_dt_chip_init()
97 dchip->nsels = nsels; in denali_dt_chip_init()
104 dchip->sels[i].bank = bank; in denali_dt_chip_init()
106 nand_set_flash_node(&dchip->chip, chip_np); in denali_dt_chip_init()
109 return denali_chip_init(denali, dchip); in denali_dt_chip_init()
114 struct device *dev = &pdev->dev; in denali_dt_probe()
117 struct denali_controller *denali; in denali_dt_probe() local
123 return -ENOMEM; in denali_dt_probe()
124 denali = &dt->controller; in denali_dt_probe()
128 return -EINVAL; in denali_dt_probe()
130 denali->revision = data->revision; in denali_dt_probe()
131 denali->caps = data->caps; in denali_dt_probe()
132 denali->oob_skip_bytes = data->oob_skip_bytes; in denali_dt_probe()
133 denali->ecc_caps = data->ecc_caps; in denali_dt_probe()
135 denali->dev = dev; in denali_dt_probe()
136 denali->irq = platform_get_irq(pdev, 0); in denali_dt_probe()
137 if (denali->irq < 0) in denali_dt_probe()
138 return denali->irq; in denali_dt_probe()
140 denali->reg = devm_platform_ioremap_resource_byname(pdev, "denali_reg"); in denali_dt_probe()
141 if (IS_ERR(denali->reg)) in denali_dt_probe()
142 return PTR_ERR(denali->reg); in denali_dt_probe()
144 denali->host = devm_platform_ioremap_resource_byname(pdev, "nand_data"); in denali_dt_probe()
145 if (IS_ERR(denali->host)) in denali_dt_probe()
146 return PTR_ERR(denali->host); in denali_dt_probe()
148 dt->clk = devm_clk_get_enabled(dev, "nand"); in denali_dt_probe()
149 if (IS_ERR(dt->clk)) in denali_dt_probe()
150 return PTR_ERR(dt->clk); in denali_dt_probe()
152 dt->clk_x = devm_clk_get_enabled(dev, "nand_x"); in denali_dt_probe()
153 if (IS_ERR(dt->clk_x)) in denali_dt_probe()
154 return PTR_ERR(dt->clk_x); in denali_dt_probe()
156 dt->clk_ecc = devm_clk_get_enabled(dev, "ecc"); in denali_dt_probe()
157 if (IS_ERR(dt->clk_ecc)) in denali_dt_probe()
158 return PTR_ERR(dt->clk_ecc); in denali_dt_probe()
160 dt->rst = devm_reset_control_get_optional_shared(dev, "nand"); in denali_dt_probe()
161 if (IS_ERR(dt->rst)) in denali_dt_probe()
162 return PTR_ERR(dt->rst); in denali_dt_probe()
164 dt->rst_reg = devm_reset_control_get_optional_shared(dev, "reg"); in denali_dt_probe()
165 if (IS_ERR(dt->rst_reg)) in denali_dt_probe()
166 return PTR_ERR(dt->rst_reg); in denali_dt_probe()
168 denali->clk_rate = clk_get_rate(dt->clk); in denali_dt_probe()
169 denali->clk_x_rate = clk_get_rate(dt->clk_x); in denali_dt_probe()
176 ret = reset_control_deassert(dt->rst_reg); in denali_dt_probe()
180 ret = reset_control_deassert(dt->rst); in denali_dt_probe()
191 ret = denali_init(denali); in denali_dt_probe()
195 for_each_child_of_node(dev->of_node, np) { in denali_dt_probe()
196 ret = denali_dt_chip_init(denali, np); in denali_dt_probe()
208 denali_remove(denali); in denali_dt_probe()
210 reset_control_assert(dt->rst); in denali_dt_probe()
212 reset_control_assert(dt->rst_reg); in denali_dt_probe()
221 denali_remove(&dt->controller); in denali_dt_remove()
222 reset_control_assert(dt->rst); in denali_dt_remove()
223 reset_control_assert(dt->rst_reg); in denali_dt_remove()
230 .name = "denali-nand-dt",
238 MODULE_DESCRIPTION("DT driver for Denali NAND controller");