/* * Copyright (C) 2017 Socionext Inc. * Author: Masahiro Yamada * * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include #include #include "denali.h" static const struct udevice_id denali_nand_dt_ids[] = { { .compatible = "altr,socfpga-denali-nand", }, { .compatible = "socionext,uniphier-denali-nand-v5a", }, { .compatible = "socionext,uniphier-denali-nand-v5b", }, { /* sentinel */ } }; static int denali_dt_probe(struct udevice *dev) { struct denali_nand_info *denali = dev_get_priv(dev); struct resource res; int ret; ret = dev_read_resource_byname(dev, "denali_reg", &res); if (ret) return ret; denali->flash_reg = devm_ioremap(dev, res.start, resource_size(&res)); ret = dev_read_resource_byname(dev, "nand_data", &res); if (ret) return ret; denali->flash_mem = devm_ioremap(dev, res.start, resource_size(&res)); return denali_init(denali); } U_BOOT_DRIVER(denali_nand_dt) = { .name = "denali-nand-dt", .id = UCLASS_MISC, .of_match = denali_nand_dt_ids, .probe = denali_dt_probe, .priv_auto_alloc_size = sizeof(struct denali_nand_info), }; void board_nand_init(void) { struct udevice *dev; int ret; ret = uclass_get_device_by_driver(UCLASS_MISC, DM_GET_DRIVER(denali_nand_dt), &dev); if (ret && ret != -ENODEV) printf("Failed to initialize Denali NAND controller. (error %d)\n", ret); }