Message ID | 1361899842-30303-13-git-send-email-jon-hunter@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Jon, On Tue, Feb 26, 2013 at 2:30 PM, Jon Hunter <jon-hunter@ti.com> wrote: [...] > > + if (!of_property_read_u32(np, "gpmc,bus-turnaround", &val)) > + gpmc_t->bus_turnaround = val; > + AFAIK, you don't need to test if the property is defined. You can just read it straightforward, and if the property is not defined then nothing will be stored in your variable: of_property_read_u32(np, "gpmc,bus-turnaround", &gpmc_t->bus_turnaround); You can simplify *a lot* your patch with this, and I believe you could also clean existent code.
On Fri, Mar 1, 2013 at 5:11 PM, Ezequiel Garcia <elezegarcia@gmail.com> wrote: > Hi Jon, > > On Tue, Feb 26, 2013 at 2:30 PM, Jon Hunter <jon-hunter@ti.com> wrote: > [...] >> >> + if (!of_property_read_u32(np, "gpmc,bus-turnaround", &val)) >> + gpmc_t->bus_turnaround = val; >> + > > AFAIK, you don't need to test if the property is defined. > You can just read it straightforward, and if the property is not defined > then nothing will be stored in your variable: > > of_property_read_u32(np, "gpmc,bus-turnaround", &gpmc_t->bus_turnaround); > > You can simplify *a lot* your patch with this, and I believe you could > also clean > existent code. > Also, since this is somewhat large patchset: would you mind pushing it somewhere so I can just pull a branch? Thanks,
On 03/01/2013 02:11 PM, Ezequiel Garcia wrote: > Hi Jon, > > On Tue, Feb 26, 2013 at 2:30 PM, Jon Hunter <jon-hunter@ti.com> wrote: > [...] >> >> + if (!of_property_read_u32(np, "gpmc,bus-turnaround", &val)) >> + gpmc_t->bus_turnaround = val; >> + > > AFAIK, you don't need to test if the property is defined. > You can just read it straightforward, and if the property is not defined > then nothing will be stored in your variable: > > of_property_read_u32(np, "gpmc,bus-turnaround", &gpmc_t->bus_turnaround); > > You can simplify *a lot* your patch with this, and I believe you could > also clean > existent code. True. I was just being consistent with the existing code in gpmc_read_timings_dt(). May be I can clean-up the entire function. Cheers Jon
On 03/01/2013 02:12 PM, Ezequiel Garcia wrote: > On Fri, Mar 1, 2013 at 5:11 PM, Ezequiel Garcia <elezegarcia@gmail.com> wrote: >> Hi Jon, >> >> On Tue, Feb 26, 2013 at 2:30 PM, Jon Hunter <jon-hunter@ti.com> wrote: >> [...] >>> >>> + if (!of_property_read_u32(np, "gpmc,bus-turnaround", &val)) >>> + gpmc_t->bus_turnaround = val; >>> + >> >> AFAIK, you don't need to test if the property is defined. >> You can just read it straightforward, and if the property is not defined >> then nothing will be stored in your variable: >> >> of_property_read_u32(np, "gpmc,bus-turnaround", &gpmc_t->bus_turnaround); >> >> You can simplify *a lot* your patch with this, and I believe you could >> also clean >> existent code. >> > > Also, since this is somewhat large patchset: would you mind pushing it somewhere > so I can just pull a branch? See link in cover-letter ;-) Jon
diff --git a/Documentation/devicetree/bindings/bus/ti-gpmc.txt b/Documentation/devicetree/bindings/bus/ti-gpmc.txt index a31c32a..53338cf 100644 --- a/Documentation/devicetree/bindings/bus/ti-gpmc.txt +++ b/Documentation/devicetree/bindings/bus/ti-gpmc.txt @@ -56,10 +56,27 @@ Timing properties for child nodes. All are optional and default to 0. - gpmc,oe-off: Deassertion time Access time and cycle time timings corresponding to GPMC_CONFIG5: - - gpmc,page-burst-access: Multiple access word delay - - gpmc,access: Start-cycle to first data valid delay - - gpmc,rd-cycle: Total read cycle time - - gpmc,wr-cycle: Total write cycle time + - gpmc,page-burst-access: Multiple access word delay + - gpmc,access: Start-cycle to first data valid delay + - gpmc,rd-cycle: Total read cycle time + - gpmc,wr-cycle: Total write cycle time + - gpmc,bus-turnaround: Turn-around time between successive accesses + - gpmc,cycle2cycle-delay: Delay between chip-select pulses + - gpmc,clk-activation: GPMC clock activation time + - gpmc,wait-monitoring: Start of wait monitoring with regard to valid + data + +Boolean timing parameters. If property is present parameter enabled and +disabled if omitted: + - gpmc,adv-extra-delay: ADV signal is delayed by half GPMC clock + - gpmc,cs-extra-delay: CS signal is delayed by half GPMC clock + - gpmc,cycle2cycle-diffcsen: Add "cycle2cycle-delay" between successive + accesses to a different CS + - gpmc,cycle2cycle-samecsen: Add "cycle2cycle-delay" between successive + accesses to the same CS + - gpmc,oe-extra-delay: OE signal is delayed by half GPMC clock + - gpmc,we-extra-delay: WE signal is delayed by half GPMC clock + - gpmc,time-para-granularity: Multiply all access times by 2 The following are only applicable to OMAP3+ and AM335x: - gpmc,wr-access diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index eb167b3..78d6c51 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -1328,12 +1328,40 @@ static void __maybe_unused gpmc_read_timings_dt(struct device_node *np, if (!of_property_read_u32(np, "gpmc,wr-cycle", &val)) gpmc_t->wr_cycle = val; + if (!of_property_read_u32(np, "gpmc,bus-turnaround", &val)) + gpmc_t->bus_turnaround = val; + + if (!of_property_read_u32(np, "gpmc,cycle2cycle-delay", &val)) + gpmc_t->cycle2cycle_delay = val; + + if (!of_property_read_u32(np, "gpmc,wait-monitoring", &val)) + gpmc_t->wait_monitoring = val; + + if (!of_property_read_u32(np, "gpmc,clk-activation", &val)) + gpmc_t->clk_activation = val; + /* only for OMAP3430 */ if (!of_property_read_u32(np, "gpmc,wr-access", &val)) gpmc_t->wr_access = val; if (!of_property_read_u32(np, "gpmc,wr-data-mux-bus", &val)) gpmc_t->wr_data_mux_bus = val; + + /* bool timing parameters */ + if (of_find_property(np, "gpmc,cycle2cycle-diffcsen", NULL)) + gpmc_t->bool_timings.cycle2cyclediffcsen = true; + if (of_find_property(np, "gpmc,cycle2cycle-samecsen", NULL)) + gpmc_t->bool_timings.cycle2cyclesamecsen = true; + if (of_find_property(np, "gpmc,we-extra-delay", NULL)) + gpmc_t->bool_timings.we_extra_delay = true; + if (of_find_property(np, "gpmc,oe-extra-delay", NULL)) + gpmc_t->bool_timings.oe_extra_delay = true; + if (of_find_property(np, "gpmc,adv-extra-delay", NULL)) + gpmc_t->bool_timings.adv_extra_delay = true; + if (of_find_property(np, "gpmc,cs-extra-delay", NULL)) + gpmc_t->bool_timings.cs_extra_delay = true; + if (of_find_property(np, "gpmc,time-para-granularity", NULL)) + gpmc_t->bool_timings.time_para_granularity = true; } #ifdef CONFIG_MTD_NAND
Some of the GPMC timings parameters are currently missing from the GPMC device-tree binding. Add these parameters to the binding documentation as well as code to read them. Signed-off-by: Jon Hunter <jon-hunter@ti.com> --- Documentation/devicetree/bindings/bus/ti-gpmc.txt | 25 +++++++++++++++--- arch/arm/mach-omap2/gpmc.c | 28 +++++++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-)