Tony Lindgren wrote:
* Mike Rapoport <m...@compulab.co.il> [100422 01:41]:
Ghorai, Sukumar wrote:

CM-T35, for instance can be assembled with different NAND flash
chips. Besides, boards that use NAND as primary boot device, we
anyway depend on proper GPMC configuration in the bootloader chain.
Having ability to define GPMC timings in the kernel and keep the
settings made by the bootloader adds flexibility level for board
designers.

Not implementing the retime function for GPMC will cause issues
with PM as you cannot scale the L3 frequency without breaking
your GPMC timings.

I agree that without retime function scaling the frequency will break the GPMC timings. But my point was that there should be an _option_ to keep the timings defined by the bootloader rather than enforce board files to specify timings. Since skipping the retime function will break gpmc timings in PM-enabled kernel, we need to implement this option in smarter way. E.g. something like:

diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c
index 64d74f0..65ac0d0 100644
--- a/arch/arm/mach-omap2/gpmc-nand.c
+++ b/arch/arm/mach-omap2/gpmc-nand.c
@@ -34,6 +34,12 @@ static struct platform_device gpmc_nand_device = {
        .resource       = &gpmc_nand_resource,
 };

+static int gpmc_nand_detect_timings(void)
+{
+       /* FIXME: implement timings detection */
+       return -EINVAL;
+}
+
 static int omap2_nand_gpmc_retime(void)
 {
        struct gpmc_timings t;
@@ -109,6 +115,14 @@ int __init gpmc_nand_init(struct omap_nand_platform_data *_nand_data)
                return err;
        }

+       if (gpmc_nand_data->keep_timings) {
+               err = gpmc_nand_detect_timings();
+               if (err < 0) {
+                       dev_err(dev, "Cannot detect GPMC timings\n");
+                       return err;
+               }
+       }
+
        err = gpmc_nand_setup();
        if (err < 0) {
                dev_err(dev, "NAND platform setup failed: %d\n", err);
diff --git a/arch/arm/plat-omap/include/plat/nand.h b/arch/arm/plat-omap/include/plat/nand.h
index 6ba88d2..cf05d2d 100644
--- a/arch/arm/plat-omap/include/plat/nand.h
+++ b/arch/arm/plat-omap/include/plat/nand.h
@@ -24,6 +24,7 @@ struct omap_nand_platform_data {
        void __iomem            *gpmc_cs_baseaddr;
        void __iomem            *gpmc_baseaddr;
        int                     devsize;
+       bool                    keep_timings;
 };

 /* size (4 KiB) for IO mapping */



Tony


--
Sincerely yours,
Mike.
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to