|
@@ -12,15 +12,38 @@
|
|
|
|
|
|
#include "denali.h"
|
|
#include "denali.h"
|
|
|
|
|
|
|
|
+struct denali_dt_data {
|
|
|
|
+ unsigned int revision;
|
|
|
|
+ unsigned int caps;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct denali_dt_data denali_socfpga_data = {
|
|
|
|
+ .caps = DENALI_CAP_HW_ECC_FIXUP,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct denali_dt_data denali_uniphier_v5a_data = {
|
|
|
|
+ .caps = DENALI_CAP_HW_ECC_FIXUP |
|
|
|
|
+ DENALI_CAP_DMA_64BIT,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct denali_dt_data denali_uniphier_v5b_data = {
|
|
|
|
+ .revision = 0x0501,
|
|
|
|
+ .caps = DENALI_CAP_HW_ECC_FIXUP |
|
|
|
|
+ DENALI_CAP_DMA_64BIT,
|
|
|
|
+};
|
|
|
|
+
|
|
static const struct udevice_id denali_nand_dt_ids[] = {
|
|
static const struct udevice_id denali_nand_dt_ids[] = {
|
|
{
|
|
{
|
|
.compatible = "altr,socfpga-denali-nand",
|
|
.compatible = "altr,socfpga-denali-nand",
|
|
|
|
+ .data = (unsigned long)&denali_socfpga_data,
|
|
},
|
|
},
|
|
{
|
|
{
|
|
.compatible = "socionext,uniphier-denali-nand-v5a",
|
|
.compatible = "socionext,uniphier-denali-nand-v5a",
|
|
|
|
+ .data = (unsigned long)&denali_uniphier_v5a_data,
|
|
},
|
|
},
|
|
{
|
|
{
|
|
.compatible = "socionext,uniphier-denali-nand-v5b",
|
|
.compatible = "socionext,uniphier-denali-nand-v5b",
|
|
|
|
+ .data = (unsigned long)&denali_uniphier_v5b_data,
|
|
},
|
|
},
|
|
{ /* sentinel */ }
|
|
{ /* sentinel */ }
|
|
};
|
|
};
|
|
@@ -28,9 +51,16 @@ static const struct udevice_id denali_nand_dt_ids[] = {
|
|
static int denali_dt_probe(struct udevice *dev)
|
|
static int denali_dt_probe(struct udevice *dev)
|
|
{
|
|
{
|
|
struct denali_nand_info *denali = dev_get_priv(dev);
|
|
struct denali_nand_info *denali = dev_get_priv(dev);
|
|
|
|
+ const struct denali_dt_data *data;
|
|
struct resource res;
|
|
struct resource res;
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
|
|
+ data = (void *)dev_get_driver_data(dev);
|
|
|
|
+ if (data) {
|
|
|
|
+ denali->revision = data->revision;
|
|
|
|
+ denali->caps = data->caps;
|
|
|
|
+ }
|
|
|
|
+
|
|
ret = dev_read_resource_byname(dev, "denali_reg", &res);
|
|
ret = dev_read_resource_byname(dev, "denali_reg", &res);
|
|
if (ret)
|
|
if (ret)
|
|
return ret;
|
|
return ret;
|