Commit ccfadbb7 authored by Sekhar Nori's avatar Sekhar Nori

Merge branch 'v4.18/nand-cs-simplification' into v4.18/soc

parents 8e730c7f 7c4db57c
...@@ -189,7 +189,7 @@ int davinci_aemif_setup(struct platform_device *pdev) ...@@ -189,7 +189,7 @@ int davinci_aemif_setup(struct platform_device *pdev)
* Setup Async configuration register in case we did not boot * Setup Async configuration register in case we did not boot
* from NAND and so bootloader did not bother to set it up. * from NAND and so bootloader did not bother to set it up.
*/ */
val = davinci_aemif_readl(base, A1CR_OFFSET + pdev->id * 4); val = davinci_aemif_readl(base, A1CR_OFFSET + pdata->core_chipsel * 4);
/* /*
* Extended Wait is not valid and Select Strobe mode is not * Extended Wait is not valid and Select Strobe mode is not
* used * used
...@@ -198,13 +198,13 @@ int davinci_aemif_setup(struct platform_device *pdev) ...@@ -198,13 +198,13 @@ int davinci_aemif_setup(struct platform_device *pdev)
if (pdata->options & NAND_BUSWIDTH_16) if (pdata->options & NAND_BUSWIDTH_16)
val |= 0x1; val |= 0x1;
davinci_aemif_writel(base, A1CR_OFFSET + pdev->id * 4, val); davinci_aemif_writel(base, A1CR_OFFSET + pdata->core_chipsel * 4, val);
clkrate = clk_get_rate(clk); clkrate = clk_get_rate(clk);
if (pdata->timing) if (pdata->timing)
ret = davinci_aemif_setup_timing(pdata->timing, base, pdev->id, ret = davinci_aemif_setup_timing(pdata->timing, base,
clkrate); pdata->core_chipsel, clkrate);
if (ret < 0) if (ret < 0)
dev_dbg(&pdev->dev, "NAND timing values setup fail\n"); dev_dbg(&pdev->dev, "NAND timing values setup fail\n");
......
...@@ -310,6 +310,7 @@ static struct davinci_aemif_timing da830_evm_nandflash_timing = { ...@@ -310,6 +310,7 @@ static struct davinci_aemif_timing da830_evm_nandflash_timing = {
}; };
static struct davinci_nand_pdata da830_evm_nand_pdata = { static struct davinci_nand_pdata da830_evm_nand_pdata = {
.core_chipsel = 1,
.parts = da830_evm_nand_partitions, .parts = da830_evm_nand_partitions,
.nr_parts = ARRAY_SIZE(da830_evm_nand_partitions), .nr_parts = ARRAY_SIZE(da830_evm_nand_partitions),
.ecc_mode = NAND_ECC_HW, .ecc_mode = NAND_ECC_HW,
......
...@@ -244,6 +244,7 @@ static struct davinci_aemif_timing da850_evm_nandflash_timing = { ...@@ -244,6 +244,7 @@ static struct davinci_aemif_timing da850_evm_nandflash_timing = {
}; };
static struct davinci_nand_pdata da850_evm_nandflash_data = { static struct davinci_nand_pdata da850_evm_nandflash_data = {
.core_chipsel = 1,
.parts = da850_evm_nandflash_partition, .parts = da850_evm_nandflash_partition,
.nr_parts = ARRAY_SIZE(da850_evm_nandflash_partition), .nr_parts = ARRAY_SIZE(da850_evm_nandflash_partition),
.ecc_mode = NAND_ECC_HW, .ecc_mode = NAND_ECC_HW,
......
...@@ -77,6 +77,7 @@ static struct mtd_partition davinci_nand_partitions[] = { ...@@ -77,6 +77,7 @@ static struct mtd_partition davinci_nand_partitions[] = {
}; };
static struct davinci_nand_pdata davinci_nand_data = { static struct davinci_nand_pdata davinci_nand_data = {
.core_chipsel = 0,
.mask_chipsel = BIT(14), .mask_chipsel = BIT(14),
.parts = davinci_nand_partitions, .parts = davinci_nand_partitions,
.nr_parts = ARRAY_SIZE(davinci_nand_partitions), .nr_parts = ARRAY_SIZE(davinci_nand_partitions),
......
...@@ -72,6 +72,7 @@ static struct mtd_partition davinci_nand_partitions[] = { ...@@ -72,6 +72,7 @@ static struct mtd_partition davinci_nand_partitions[] = {
}; };
static struct davinci_nand_pdata davinci_nand_data = { static struct davinci_nand_pdata davinci_nand_data = {
.core_chipsel = 0,
.mask_chipsel = BIT(14), .mask_chipsel = BIT(14),
.parts = davinci_nand_partitions, .parts = davinci_nand_partitions,
.nr_parts = ARRAY_SIZE(davinci_nand_partitions), .nr_parts = ARRAY_SIZE(davinci_nand_partitions),
......
...@@ -138,6 +138,7 @@ static struct mtd_partition davinci_nand_partitions[] = { ...@@ -138,6 +138,7 @@ static struct mtd_partition davinci_nand_partitions[] = {
}; };
static struct davinci_nand_pdata davinci_nand_data = { static struct davinci_nand_pdata davinci_nand_data = {
.core_chipsel = 0,
.mask_chipsel = BIT(14), .mask_chipsel = BIT(14),
.parts = davinci_nand_partitions, .parts = davinci_nand_partitions,
.nr_parts = ARRAY_SIZE(davinci_nand_partitions), .nr_parts = ARRAY_SIZE(davinci_nand_partitions),
......
...@@ -152,6 +152,7 @@ static struct davinci_aemif_timing davinci_evm_nandflash_timing = { ...@@ -152,6 +152,7 @@ static struct davinci_aemif_timing davinci_evm_nandflash_timing = {
}; };
static struct davinci_nand_pdata davinci_evm_nandflash_data = { static struct davinci_nand_pdata davinci_evm_nandflash_data = {
.core_chipsel = 0,
.parts = davinci_evm_nandflash_partition, .parts = davinci_evm_nandflash_partition,
.nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition), .nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition),
.ecc_mode = NAND_ECC_HW, .ecc_mode = NAND_ECC_HW,
......
...@@ -84,6 +84,7 @@ static struct davinci_aemif_timing dm6467tevm_nandflash_timing = { ...@@ -84,6 +84,7 @@ static struct davinci_aemif_timing dm6467tevm_nandflash_timing = {
}; };
static struct davinci_nand_pdata davinci_nand_data = { static struct davinci_nand_pdata davinci_nand_data = {
.core_chipsel = 0,
.mask_cle = 0x80000, .mask_cle = 0x80000,
.mask_ale = 0x40000, .mask_ale = 0x40000,
.parts = davinci_nand_partitions, .parts = davinci_nand_partitions,
......
...@@ -400,6 +400,7 @@ static struct mtd_partition mityomapl138_nandflash_partition[] = { ...@@ -400,6 +400,7 @@ static struct mtd_partition mityomapl138_nandflash_partition[] = {
}; };
static struct davinci_nand_pdata mityomapl138_nandflash_data = { static struct davinci_nand_pdata mityomapl138_nandflash_data = {
.core_chipsel = 1,
.parts = mityomapl138_nandflash_partition, .parts = mityomapl138_nandflash_partition,
.nr_parts = ARRAY_SIZE(mityomapl138_nandflash_partition), .nr_parts = ARRAY_SIZE(mityomapl138_nandflash_partition),
.ecc_mode = NAND_ECC_HW, .ecc_mode = NAND_ECC_HW,
......
...@@ -87,6 +87,7 @@ static struct mtd_partition davinci_ntosd2_nandflash_partition[] = { ...@@ -87,6 +87,7 @@ static struct mtd_partition davinci_ntosd2_nandflash_partition[] = {
}; };
static struct davinci_nand_pdata davinci_ntosd2_nandflash_data = { static struct davinci_nand_pdata davinci_ntosd2_nandflash_data = {
.core_chipsel = 0,
.parts = davinci_ntosd2_nandflash_partition, .parts = davinci_ntosd2_nandflash_partition,
.nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition), .nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition),
.ecc_mode = NAND_ECC_HW, .ecc_mode = NAND_ECC_HW,
......
...@@ -547,7 +547,7 @@ static struct davinci_nand_pdata ...@@ -547,7 +547,7 @@ static struct davinci_nand_pdata
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
if (!of_property_read_u32(pdev->dev.of_node, if (!of_property_read_u32(pdev->dev.of_node,
"ti,davinci-chipselect", &prop)) "ti,davinci-chipselect", &prop))
pdev->id = prop; pdata->core_chipsel = prop;
else else
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
...@@ -629,7 +629,7 @@ static int nand_davinci_probe(struct platform_device *pdev) ...@@ -629,7 +629,7 @@ static int nand_davinci_probe(struct platform_device *pdev)
return -ENODEV; return -ENODEV;
/* which external chipselect will we be managing? */ /* which external chipselect will we be managing? */
if (pdev->id < 0 || pdev->id > 3) if (pdata->core_chipsel < 0 || pdata->core_chipsel > 3)
return -ENODEV; return -ENODEV;
info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
...@@ -685,7 +685,7 @@ static int nand_davinci_probe(struct platform_device *pdev) ...@@ -685,7 +685,7 @@ static int nand_davinci_probe(struct platform_device *pdev)
info->ioaddr = (uint32_t __force) vaddr; info->ioaddr = (uint32_t __force) vaddr;
info->current_cs = info->ioaddr; info->current_cs = info->ioaddr;
info->core_chipsel = pdev->id; info->core_chipsel = pdata->core_chipsel;
info->mask_chipsel = pdata->mask_chipsel; info->mask_chipsel = pdata->mask_chipsel;
/* use nandboot-capable ALE/CLE masks by default */ /* use nandboot-capable ALE/CLE masks by default */
......
...@@ -56,6 +56,16 @@ struct davinci_nand_pdata { /* platform_data */ ...@@ -56,6 +56,16 @@ struct davinci_nand_pdata { /* platform_data */
uint32_t mask_ale; uint32_t mask_ale;
uint32_t mask_cle; uint32_t mask_cle;
/*
* 0-indexed chip-select number of the asynchronous
* interface to which the NAND device has been connected.
*
* So, if you have NAND connected to CS3 of DA850, you
* will pass '1' here. Since the asynchronous interface
* on DA850 starts from CS2.
*/
uint32_t core_chipsel;
/* for packages using two chipselects */ /* for packages using two chipselects */
uint32_t mask_chipsel; uint32_t mask_chipsel;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment