[PATCH v6 08/13] ARM: OMAP2+: gpmc: holler if no configuration
Afzal Mohammed
afzal at ti.com
Fri Jun 22 08:57:17 EDT 2012
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 at ti.com>
---
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
More information about the linux-arm-kernel
mailing list