Re: [PATCH V3 10/18] ARM: OMAP2+: Add function to read GPMC settings from device-tree
On 03/17/2013 12:24 AM, Ezequiel Garcia wrote: Hi Jon, I have some tiny nitpicks... On Fri, Mar 15, 2013 at 10:21:08AM -0500, Jon Hunter wrote: Adds a function to read the various GPMC chip-select settings from device-tree and store them in the gpmc_settings structure. Update the GPMC device-tree binding documentation to describe these options. Signed-off-by: Jon Hunter jon-hun...@ti.com --- Documentation/devicetree/bindings/bus/ti-gpmc.txt | 23 ++ arch/arm/mach-omap2/gpmc.c| 49 + arch/arm/mach-omap2/gpmc.h|2 + 3 files changed, 74 insertions(+) diff --git a/Documentation/devicetree/bindings/bus/ti-gpmc.txt b/Documentation/devicetree/bindings/bus/ti-gpmc.txt index 5ddb2e9..6fde1cf 100644 --- a/Documentation/devicetree/bindings/bus/ti-gpmc.txt +++ b/Documentation/devicetree/bindings/bus/ti-gpmc.txt @@ -65,6 +65,29 @@ The following are only applicable to OMAP3+ and AM335x: - gpmc,wr-access - gpmc,wr-data-mux-bus +GPMC chip-select settings properties for child nodes. All are optional. + +- gpmc,burst-length Page/burst length. Must be 4, 8 or 16. +- gpmc,burst-wrap Enables wrap bursting +- gpmc,burst-read Enables read page/burst mode +- gpmc,burst-write Enables write page/burst mode +- gpmc,device-nand Device is NAND +- gpmc,device-width Total width of device(s) connected to a GPMC +chip-select in bytes. The GPMC supports 8-bit +and 16-bit devices and so this property must be +1 or 2. +- gpmc,mux-add-data Address and data multiplexing configuration. +Valid values are 1 for address-address-data +multiplexing mode and 2 for address-data +multiplexing mode. +- gpmc,sync-readEnables synchronous read. Defaults to asynchronous +is this is not set. +- gpmc,sync-write Enables synchronous writes. Defaults to asynchronous +is this is not set. +- gpmc,wait-pin Wait-pin used by client. Must be less than +gpmc,num-waitpins. +- gpmc,wait-on-read Enables wait monitoring on reads. +- gpmc,wait-on-writeEnables wait monitoring on writes. Example for an AM33xx board: diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index 3ec1937..1e7eef3 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -1190,6 +1190,55 @@ static struct of_device_id gpmc_dt_ids[] = { }; MODULE_DEVICE_TABLE(of, gpmc_dt_ids); +/** + * gpmc_read_settings_dt - read gpmc settings from device-tree + * @np: pointer to device-tree node for a gpmc child device + * @p: pointer to gpmc settings structure + * + * Reads the GPMC settings for a GPMC child device from device-tree and + * stores them in the GPMC settings structure passed. The GPMC settings + * structure is initialise to zero by this function and so any previously s/initialise/initialized ? Thanks will add the d. However, initialise is correct British English ;-) + * stored settings will be clearer. s/clearer/cleared ? I'm not an english native speaker, so please bare with me if I'm wrong on these... You are right here too. Will fix thanks! Jon ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH V3 10/18] ARM: OMAP2+: Add function to read GPMC settings from device-tree
Hi Jon, I have some tiny nitpicks... On Fri, Mar 15, 2013 at 10:21:08AM -0500, Jon Hunter wrote: Adds a function to read the various GPMC chip-select settings from device-tree and store them in the gpmc_settings structure. Update the GPMC device-tree binding documentation to describe these options. Signed-off-by: Jon Hunter jon-hun...@ti.com --- Documentation/devicetree/bindings/bus/ti-gpmc.txt | 23 ++ arch/arm/mach-omap2/gpmc.c| 49 + arch/arm/mach-omap2/gpmc.h|2 + 3 files changed, 74 insertions(+) diff --git a/Documentation/devicetree/bindings/bus/ti-gpmc.txt b/Documentation/devicetree/bindings/bus/ti-gpmc.txt index 5ddb2e9..6fde1cf 100644 --- a/Documentation/devicetree/bindings/bus/ti-gpmc.txt +++ b/Documentation/devicetree/bindings/bus/ti-gpmc.txt @@ -65,6 +65,29 @@ The following are only applicable to OMAP3+ and AM335x: - gpmc,wr-access - gpmc,wr-data-mux-bus +GPMC chip-select settings properties for child nodes. All are optional. + +- gpmc,burst-length Page/burst length. Must be 4, 8 or 16. +- gpmc,burst-wrapEnables wrap bursting +- gpmc,burst-readEnables read page/burst mode +- gpmc,burst-write Enables write page/burst mode +- gpmc,device-nand Device is NAND +- gpmc,device-width Total width of device(s) connected to a GPMC + chip-select in bytes. The GPMC supports 8-bit + and 16-bit devices and so this property must be + 1 or 2. +- gpmc,mux-add-data Address and data multiplexing configuration. + Valid values are 1 for address-address-data + multiplexing mode and 2 for address-data + multiplexing mode. +- gpmc,sync-read Enables synchronous read. Defaults to asynchronous + is this is not set. +- gpmc,sync-writeEnables synchronous writes. Defaults to asynchronous + is this is not set. +- gpmc,wait-pin Wait-pin used by client. Must be less than + gpmc,num-waitpins. +- gpmc,wait-on-read Enables wait monitoring on reads. +- gpmc,wait-on-write Enables wait monitoring on writes. Example for an AM33xx board: diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index 3ec1937..1e7eef3 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -1190,6 +1190,55 @@ static struct of_device_id gpmc_dt_ids[] = { }; MODULE_DEVICE_TABLE(of, gpmc_dt_ids); +/** + * gpmc_read_settings_dt - read gpmc settings from device-tree + * @np: pointer to device-tree node for a gpmc child device + * @p: pointer to gpmc settings structure + * + * Reads the GPMC settings for a GPMC child device from device-tree and + * stores them in the GPMC settings structure passed. The GPMC settings + * structure is initialise to zero by this function and so any previously s/initialise/initialized ? + * stored settings will be clearer. s/clearer/cleared ? I'm not an english native speaker, so please bare with me if I'm wrong on these... -- Ezequiel GarcĂa, Free Electrons Embedded Linux, Kernel and Android Engineering http://free-electrons.com ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
[PATCH V3 10/18] ARM: OMAP2+: Add function to read GPMC settings from device-tree
Adds a function to read the various GPMC chip-select settings from device-tree and store them in the gpmc_settings structure. Update the GPMC device-tree binding documentation to describe these options. Signed-off-by: Jon Hunter jon-hun...@ti.com --- Documentation/devicetree/bindings/bus/ti-gpmc.txt | 23 ++ arch/arm/mach-omap2/gpmc.c| 49 + arch/arm/mach-omap2/gpmc.h|2 + 3 files changed, 74 insertions(+) diff --git a/Documentation/devicetree/bindings/bus/ti-gpmc.txt b/Documentation/devicetree/bindings/bus/ti-gpmc.txt index 5ddb2e9..6fde1cf 100644 --- a/Documentation/devicetree/bindings/bus/ti-gpmc.txt +++ b/Documentation/devicetree/bindings/bus/ti-gpmc.txt @@ -65,6 +65,29 @@ The following are only applicable to OMAP3+ and AM335x: - gpmc,wr-access - gpmc,wr-data-mux-bus +GPMC chip-select settings properties for child nodes. All are optional. + +- gpmc,burst-lengthPage/burst length. Must be 4, 8 or 16. +- gpmc,burst-wrap Enables wrap bursting +- gpmc,burst-read Enables read page/burst mode +- gpmc,burst-write Enables write page/burst mode +- gpmc,device-nand Device is NAND +- gpmc,device-widthTotal width of device(s) connected to a GPMC + chip-select in bytes. The GPMC supports 8-bit + and 16-bit devices and so this property must be + 1 or 2. +- gpmc,mux-add-dataAddress and data multiplexing configuration. + Valid values are 1 for address-address-data + multiplexing mode and 2 for address-data + multiplexing mode. +- gpmc,sync-read Enables synchronous read. Defaults to asynchronous + is this is not set. +- gpmc,sync-write Enables synchronous writes. Defaults to asynchronous + is this is not set. +- gpmc,wait-pinWait-pin used by client. Must be less than + gpmc,num-waitpins. +- gpmc,wait-on-readEnables wait monitoring on reads. +- gpmc,wait-on-write Enables wait monitoring on writes. Example for an AM33xx board: diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index 3ec1937..1e7eef3 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -1190,6 +1190,55 @@ static struct of_device_id gpmc_dt_ids[] = { }; MODULE_DEVICE_TABLE(of, gpmc_dt_ids); +/** + * gpmc_read_settings_dt - read gpmc settings from device-tree + * @np:pointer to device-tree node for a gpmc child device + * @p: pointer to gpmc settings structure + * + * Reads the GPMC settings for a GPMC child device from device-tree and + * stores them in the GPMC settings structure passed. The GPMC settings + * structure is initialise to zero by this function and so any previously + * stored settings will be clearer. + */ +void gpmc_read_settings_dt(struct device_node *np, struct gpmc_settings *p) +{ + memset(p, 0, sizeof(struct gpmc_settings)); + + if (of_find_property(np, gpmc,sync-read, NULL)) + p-sync_read = true; + if (of_find_property(np, gpmc,sync-write, NULL)) + p-sync_write = true; + + if (!of_property_read_u32(np, gpmc,burst-length, p-burst_len)) { + if (of_find_property(np, gpmc,burst-wrap, NULL)) + p-burst_wrap = true; + if (of_find_property(np, gpmc,burst-read, NULL)) + p-burst_read = true; + if (of_find_property(np, gpmc,burst-write, NULL)) + p-burst_write = true; + if (!p-burst_read !p-burst_write) + pr_warn(%s: page/burst-length set but not used!\n, + __func__); + } + + if (!of_property_read_u32(np, gpmc,wait-pin, p-wait_pin)) { + if (of_find_property(np, gpmc,wait-on-read, NULL)) + p-wait_on_read = true; + if (of_find_property(np, gpmc,wait-on-write, NULL)) + p-wait_on_write = true; + if (!p-wait_on_read !p-wait_on_write) + pr_warn(%s: read/write wait monitoring not enabled!\n, + __func__); + } + + of_property_read_u32(np, gpmc,device-width, p-device_width); + + if (of_find_property(np, gpmc,device-nand, NULL)) + p-device_nand = true; + + of_property_read_u32(np, gpmc,mux-add-data, p-mux_add_data); +} + static void __maybe_unused gpmc_read_timings_dt(struct device_node *np, struct gpmc_timings *gpmc_t) { diff --git a/arch/arm/mach-omap2/gpmc.h b/arch/arm/mach-omap2/gpmc.h index 87d2a22..707f6d5 100644 --- a/arch/arm/mach-omap2/gpmc.h +++ b/arch/arm/mach-omap2/gpmc.h @@ -225,5 +225,7 @@ extern void gpmc_cs_free(int cs); extern void omap3_gpmc_save_context(void);