Some of the GPMC peripherals depend on bootloader to do the configuration. This facility is deprecated, notify user about the present GPMC settings & inform that that relying on bootloader for GPMC setting is deprecated. Note: This has to be reverted once Kernel is updated with sufficient details so that all the gpmc periherals can be configured in Kernel for all boards instead of relying on bootloader. Signed-off-by: Afzal Mohammed <afzal@xxxxxx> --- arch/arm/mach-omap2/gpmc.c | 104 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index 1998285..9e3960e 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -1056,6 +1056,110 @@ static void gpmc_cs_set_register_timings(int cs, const struct gpmc_timings *t) gpmc_cs_bool_timings(cs, &t->bool_timings); } +static void gpmc_print_cs_config(int cs) +{ + u32 l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1); + + dev_warn(gpmc_dev, "GPMC CS%d depends on bootloader for config\n", cs); + dev_warn(gpmc_dev, "Please update it in Kernel ASAP to prevent losing support for this peripheral\n"); + dev_warn(gpmc_dev, "Bootloader dependency for GPMC configuration is deprecated\n"); + + dev_warn(gpmc_dev, "muxadddata: %s\n", + l & GPMC_CONFIG1_MUXADDDATA ? "yes" : "no"); + dev_warn(gpmc_dev, "writetypesync: %s\n", + l & GPMC_CONFIG1_WRITETYPE_SYNC ? "yes" : "no"); + dev_warn(gpmc_dev, "writemultiple: %s\n", + l & GPMC_CONFIG1_WRITEMULTIPLE_SUPP ? "yes" : "no"); + dev_warn(gpmc_dev, "readtypesync: %s\n", + l & GPMC_CONFIG1_READTYPE_SYNC ? "yes" : "no"); + dev_warn(gpmc_dev, "readmultiple: %s\n", + l & GPMC_CONFIG1_READMULTIPLE_SUPP ? "yes" : "no"); + dev_warn(gpmc_dev, "wrapburst: %s\n", + l & GPMC_CONFIG1_WRAPBURST_SUPP ? "yes" : "no"); + dev_warn(gpmc_dev, "devicetype: %s\n", + l & GPMC_CONFIG1_DEVICETYPE_NAND ? "nand" : "nor"); + dev_warn(gpmc_dev, "devicesize: %d\n", + l & GPMC_CONFIG1_DEVICESIZE_16 ? 16 : 8); + dev_warn(gpmc_dev, "pagelength: %d\n", + l & GPMC_CONFIG1_PAGE_LEN(~0) ? + (l & GPMC_CONFIG1_PAGE_LEN_16 ? 16 : 8) : 4); +} +static inline unsigned gpmc_get_one_timing(int cs, int reg, int start, int end) +{ + u32 l = gpmc_cs_read_reg(cs, reg); + unsigned mask; + + mask = (1 << (end - start + 1)) - 1; + l &= (mask << start); + return l >>= start; +} + +static void gpmc_print_cs_timings(int cs) +{ + dev_warn(gpmc_dev, "GPMC CS%d depends on bootloader for timing\n", cs); + dev_warn(gpmc_dev, "Please update it in Kernel ASAP to prevent losing support for this peripheral\n"); + dev_warn(gpmc_dev, "Bootloader dependency for GPMC configuration is deprecated\n"); + + dev_warn(gpmc_dev, "fclk period: %lups\n", gpmc_get_fclk_period()); + dev_warn(gpmc_dev, "sync_clk: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG1, 0, 1)); + dev_warn(gpmc_dev, "wait_monitoring: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG1, 18, 19)); + dev_warn(gpmc_dev, "clk_activation: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG1, 25, 26)); + dev_warn(gpmc_dev, "cs_on: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG2, 0, 3)); + dev_warn(gpmc_dev, "cs_rd_off: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG2, 8, 12)); + dev_warn(gpmc_dev, "cs_wr_off: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG2, 16, 20)); + dev_warn(gpmc_dev, "adv_on: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG3, 0, 3)); + dev_warn(gpmc_dev, "adv_rd_off: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG3, 8, 12)); + dev_warn(gpmc_dev, "adv_wr_off: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG3, 16, 20)); + dev_warn(gpmc_dev, "oe_on: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG4, 0, 3)); + dev_warn(gpmc_dev, "oe_off: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG4, 8, 12)); + dev_warn(gpmc_dev, "we_on: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG4, 16, 19)); + dev_warn(gpmc_dev, "we_off: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG4, 24, 28)); + dev_warn(gpmc_dev, "rd_cycle: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG5, 0, 4)); + dev_warn(gpmc_dev, "wr_cycle: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG5, 8, 12)); + dev_warn(gpmc_dev, "acess: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG5, 16, 20)); + dev_warn(gpmc_dev, "page_burst_access: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG5, 24, 27)); + dev_warn(gpmc_dev, "bus_turnaround: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG6, 0, 3)); + dev_warn(gpmc_dev, "cycle2cycle_delay: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG6, 8, 11)); + dev_warn(gpmc_dev, "wr_data_mux_bus: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG6, 16, 19)); + dev_warn(gpmc_dev, "wr_access: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG6, 24, 28)); + + dev_warn(gpmc_dev, "time_para_granularity: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG1, 4, 4)); + dev_warn(gpmc_dev, "cs_extra_delay: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG2, 7, 7)); + dev_warn(gpmc_dev, "adv_extra_delay: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG3, 7, 7)); + dev_warn(gpmc_dev, "oe_extra_delay: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG4, 7, 7)); + dev_warn(gpmc_dev, "we_extra_delay: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG4, 23, 23)); + dev_warn(gpmc_dev, "cycle2cyclediffcsen: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG6, 6, 6)); + dev_warn(gpmc_dev, "cycle2cyclesamecsen: %u\n", + gpmc_get_one_timing(cs, GPMC_CS_CONFIG6, 7, 7)); +} + static __devinit int gpmc_setup_cs_irq(struct gpmc_cs_data *cs, struct resource *res) { -- 1.7.10.2 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html