From: "Cousson, Benoit" <b-cousson@ti.com>
To: "G, Manjunath Kondaiah" <manjugk@ti.com>
Cc: Kevin Hilman <khilman@deeprootsystems.com>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"Shilimkar, Santosh" <santosh.shilimkar@ti.com>
Subject: Re: [PATCH v2 09/11] OMAP: DMA: Implement generic errata handling
Date: Fri, 17 Sep 2010 09:24:37 +0200 [thread overview]
Message-ID: <4C9317B5.3050308@ti.com> (raw)
In-Reply-To: <E0D41E29EB0DAC4E9F3FF173962E9E9402784DC7D5@dbde02.ent.ti.com>
Hi Manjunath,
On 9/17/2010 7:05 AM, G, Manjunath Kondaiah wrote:
> Kevin,
>
>> -----Original Message-----
>> From: G, Manjunath Kondaiah
>> Sent: Tuesday, September 14, 2010 3:42 PM
>> To: G, Manjunath Kondaiah; Kevin Hilman
>> Cc: linux-omap@vger.kernel.org; Cousson, Benoit; Shilimkar, Santosh
>> Subject: RE: [PATCH v2 09/11] OMAP: DMA: Implement generic
>> errata handling
>>
>> Kevin,
>>
>>> -----Original Message-----
>>> From: linux-omap-owner@vger.kernel.org
>>> [mailto:linux-omap-owner@vger.kernel.org] On Behalf Of G, Manjunath
>>> Kondaiah
>>> Sent: Tuesday, September 07, 2010 5:18 PM
>>> To: Kevin Hilman
>>> Cc: linux-omap@vger.kernel.org; Cousson, Benoit; Shilimkar, Santosh
>>> Subject: RE: [PATCH v2 09/11] OMAP: DMA: Implement generic errata
>>> handling
>>>
>>>
>>>
>>>> -----Original Message-----
>>>> From: Kevin Hilman [mailto:khilman@deeprootsystems.com]
>>>> Sent: Saturday, September 04, 2010 4:12 AM
>>>> To: G, Manjunath Kondaiah
>>>> Cc: linux-omap@vger.kernel.org; Cousson, Benoit;
>> Shilimkar, Santosh
>>>> Subject: Re: [PATCH v2 09/11] OMAP: DMA: Implement generic errata
>>>> handling
>>>>
>>>> Manjunatha GK<manjugk@ti.com> writes:
>>>>
>>>>> This patch introduces generic way of handling all OMAP
>>> DMA errata's
>>>>> which are applicable for OMAP1 and OMAP2PLUS processors.
>>>>>
>>>>> Signed-off-by: Manjunatha GK<manjugk@ti.com>
>>>>> Cc: Benoit Cousson<b-cousson@ti.com>
>>>>> Cc: Kevin Hilman<khilman@deeprootsystems.com>
>>>>> Cc: Santosh Shilimkar<santosh.shilimkar@ti.com>
>>>>> ---
>>>>> arch/arm/mach-omap1/dma.c | 6 ++++
>>>>> arch/arm/mach-omap2/dma.c | 34
>>>> +++++++++++++++++++++++
>>>>> arch/arm/plat-omap/dma.c | 48
>>>> ++++++++++++++++++--------------
>>>>> arch/arm/plat-omap/include/plat/dma.h | 9 ++++++
>>>>> 4 files changed, 76 insertions(+), 21 deletions(-)
>>>>>
>>>>> diff --git a/arch/arm/mach-omap1/dma.c
>>> b/arch/arm/mach-omap1/dma.c
>>>>> index 26ab6e3..615c5f5 100644
>>>>> --- a/arch/arm/mach-omap1/dma.c
>>>>> +++ b/arch/arm/mach-omap1/dma.c
>>>>> @@ -170,6 +170,12 @@ static int __init
>> omap1_system_dma_init(void)
>>>>> goto exit_device_put;
>>>>> }
>>>>>
>>>>> + /* Errata handling for all omap1 plus processors */
>>>>> + pdata->errata = 0;
>>>>
>>>> This isn't needed as you just kzalloc'd pdata.
>>> ok
>>>>
>>>>> + if (cpu_class_is_omap1()&& !cpu_is_omap15xx())
>>>>
>>>> You don't need cpu_class_is_omap1() as this is OMAP1
>> specific code.
>>> Ok. Looks like copy, paste issue from plat-omap dma.c. I
>> will fix it.
>>>>
>>>>> + pdata->errata |= OMAP3_3_ERRATUM;
>>>>> +
>>>>> d = pdata->dma_attr;
>>>>>
>>>>> /* Valid attributes for omap1 plus processors
>> */ diff --git
>>>>> a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c index
>>>>> f369bee..8832bd1 100644
>>>>> --- a/arch/arm/mach-omap2/dma.c
>>>>> +++ b/arch/arm/mach-omap2/dma.c
>>>>> @@ -80,6 +80,40 @@ static int __init
>>>> omap2_system_dma_init_dev(struct omap_hwmod *oh, void *user)
>>>>>
>>>>> pdata->dma_attr = (struct omap_dma_dev_attr
>>>> *)oh->dev_attr;
>>>>>
>>>>> + /* Handling Errata's for all OMAP2PLUS processors */
>>>>> + pdata->errata = 0;
>>>>
>>>> not needed, see above
>>> ok
>>>>
>>>>> + if (cpu_is_omap242x() ||
>>>>> + (cpu_is_omap243x()&& omap_type()<=
>>>> OMAP2430_REV_ES1_0))
>>>>> + pdata->errata = DMA_CHAINING_ERRATA;
>>>>> +
>>>>> + /*
>>>>> + * Errata: On ES2.0 BUFFERING disable must be set.
>>>>> + * This will always fail on ES1.0
>>>>> + */
>>>>> + if (cpu_is_omap24xx())
>>>>> + pdata->errata |=
>> DMA_BUFF_DISABLE_ERRATA;
>>>>> +
>>>>> + /*
>>>>> + * Errata: OMAP2: sDMA Channel is not disabled
>>>>> + * after a transaction error. So we explicitely
>>>>> + * disable the channel
>>>>> + */
>>>>> + if (cpu_class_is_omap2())
>>>>> + pdata->errata |=
>> DMA_CH_DISABLE_ERRATA;
>>>>> +
>>>>> + /* Errata: OMAP3 :
>>>>
>>>> fix multi-line comment style
>>> Ok.
>>>
>>>>
>>>>> + * A bug in ROM code leaves IRQ status for channels 0
>>>> and 1 uncleared
>>>>> + * after secure sram context save and restore.
>> Hence we need to
>>>>> + * manually clear those IRQs to avoid spurious
>> interrupts. This
>>>>> + * affects only secure devices.
>>>>> + */
>>>>> + if (cpu_is_omap34xx()&& (omap_type() !=
>> OMAP2_DEVICE_TYPE_GP))
>>>>> + pdata->errata |=
>> DMA_IRQ_STATUS_ERRATA;
>>>>> +
>>>>> + /* Errata3.3: Applicable for all omap2 plus */
>>>>> + pdata->errata |= OMAP3_3_ERRATUM;
>>>>> +
>>>>> od = omap_device_build(name, 0, oh, pdata,
>> sizeof(*pdata),
>>>>> omap2_dma_latency,
>>>> ARRAY_SIZE(omap2_dma_latency), 0);
>>>>>
>>>>> diff --git a/arch/arm/plat-omap/dma.c
>> b/arch/arm/plat-omap/dma.c
>>>>> index 36c3dde..409586a 100644
>>>>> --- a/arch/arm/plat-omap/dma.c
>>>>> +++ b/arch/arm/plat-omap/dma.c
>>>>> @@ -187,6 +187,25 @@ static inline void set_gdma_dev(int
>>>> req, int dev)
>>>>> #define set_gdma_dev(req, dev) do {} while (0)
>>>>> #endif
>>>>>
>>>>> +static void dma_ocpsysconfig_errata(u32 *sys_cf, bool flag)
>>>>
>>>> Please use (or extend) hwmod layer for modifying device SYSCONFIG.
>>>
>>> I will check this.
>>
>> I propose following options for addressing this errata:
>> Option 1:
>> Creating 2 new API's with 1 static function in omap_hwmod.c
>> for handling midle mode errata issues.
>>
>> static int _get_master_standbymode(oh, u32 *idlemode, u32 v);
>> int omap_hwmod_set_master_idlemode(struct omap_hwmod *oh, u8
>> idlemode); int omap_hwmod_get_master_idlemode(struct
>> omap_hwmod *oh, u32 *idlemode);
>>
>> In dma driver, the api's will be used as:
>> omap_hwmod_get_master_idlemode(oh, midle_mode);
>> omap_hwmod_set_master_idlemode(oh, 1);
>> /* disable channels which completed data transfer */ ...
>> /* Restore original standby mode values */
>> omap_hwmod_set_master_idlemode(oh, *midle_mode)
>>
>>
>> Option 2:
>> Create 1 new exported API for modifying sysconfig standby mode bits.
>> In this case, restoring original standby mode value is
>> through accessing sysc flags and _sysc_cache values through
>> oh in DMA driver.
>>
>> I feel option #1 seems to be cleaner approach since it avoids
>> accessing oh contents in driver. Let me know if you have
>> objections for the same.
>>
>> /Code snippet for option 1 */
>> static int _get_master_standbymode(oh, u32 *idlemode) {
>> u32 mstandby_mask;
>> u8 mstandby_shift;
>>
>> ...
>>
>> mstandby_shift = oh->class->sysc->sysc_fields->midle_shift;
>> mstandby_mask = (0x3<< mstandby_shift);
>> *idle_mode = ((oh->_sysc_cache)& mstandby_mask)>>
>> mstandby_shift;
>>
>> return 0;
>> }
>>
>> int omap_hwmod_set_master_idlemode(struct omap_hwmod *oh, u8
>> idlemode) {
>> u32 v;
>> int retval = 0;
>> ...
>> v = oh->_sysc_cache;
>>
>> retval = _set_master_standbymode(oh, idlemode,&v);
>> if (!retval)
>> _write_sysconfig(v, oh);
>>
>> return retval;
>> }
>>
>> int omap_hwmod_get_master_idlemode(struct omap_hwmod *oh, u32
>> *idlemode) {
>> u32 v;
>> int retval = 0;
>> ...
>> retval = _get_master_standbymode(oh, idlemode);
>> return retval;
>> }
>>
>
> I assume you are ok with option #1. Let me know if you have any
> issues/concenrs with above approach. I am in the process of consolidating
> all the review comments and addressing all applicable review comments.
Not really, the option #1 will still require you to use the oh pointer,
which is supposed to be private to the omap_device.
What is still not clear is why and when you need to change the sysconfig
setting.
Do you have a details explanation? Ideally you should try to couple the
sysconfig change along with pm_runtime / hwmod state change, then we
will be able to handle that smoothly in the framework.
If you cannot do that, you will need to add an omap_device API as well.
Regards,
Benoit
next prev parent reply other threads:[~2010-09-17 7:24 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-24 11:04 [PATCH v2 00/11] OMAP: DMA: HWMOD and DMA as platform driver Manjunatha GK
2010-08-24 11:04 ` [PATCH v2 01/11] OMAP: DMA: Introduce DMA device attributes Manjunatha GK
2010-08-24 11:04 ` [PATCH v2 02/11] OMAP2420: DMA: HWMOD: Add hwmod data structures Manjunatha GK
2010-08-24 11:04 ` [PATCH v2 03/11] OMAP2430: " Manjunatha GK
2010-08-24 11:30 ` Mika Westerberg
2010-08-24 14:32 ` G, Manjunath Kondaiah
2010-08-24 11:04 ` [PATCH v2 04/11] OMAP3: " Manjunatha GK
2010-09-03 20:51 ` Kevin Hilman
2010-09-04 14:45 ` Cousson, Benoit
2010-09-08 1:52 ` G, Manjunath Kondaiah
2010-08-24 11:04 ` [PATCH v2 05/11] OMAP4: " Manjunatha GK
2010-08-24 11:04 ` [PATCH v2 06/11] OMAP1: DMA: Introduce DMA driver as platform driver Manjunatha GK
2010-08-24 11:04 ` [PATCH v2 07/11] OMAP2/3/4: DMA: HWMOD: Device registration Manjunatha GK
2010-09-03 20:59 ` Kevin Hilman
2010-09-07 11:47 ` G, Manjunath Kondaiah
2010-09-14 10:18 ` G, Manjunath Kondaiah
2010-09-14 10:24 ` Felipe Balbi
2010-09-14 11:44 ` G, Manjunath Kondaiah
2010-09-14 11:57 ` Felipe Balbi
2010-09-14 14:11 ` G, Manjunath Kondaiah
2010-09-15 7:11 ` Felipe Balbi
2010-09-16 3:40 ` G, Manjunath Kondaiah
2010-09-16 6:03 ` Felipe Balbi
2010-09-16 6:32 ` G, Manjunath Kondaiah
2010-09-16 6:40 ` Felipe Balbi
2010-09-16 6:53 ` G, Manjunath Kondaiah
2010-09-16 6:58 ` Cousson, Benoit
2010-09-16 7:05 ` Felipe Balbi
2010-09-16 14:16 ` Kevin Hilman
2010-08-24 11:04 ` [PATCH v2 08/11] OMAP: DMA: Convert DMA library into DMA platform Driver Manjunatha GK
2010-09-03 22:34 ` Kevin Hilman
2010-09-07 11:47 ` G, Manjunath Kondaiah
2010-09-07 22:45 ` Kevin Hilman
2010-09-08 1:46 ` G, Manjunath Kondaiah
2010-08-24 11:04 ` [PATCH v2 09/11] OMAP: DMA: Implement generic errata handling Manjunatha GK
2010-09-03 22:42 ` Kevin Hilman
2010-09-07 11:48 ` G, Manjunath Kondaiah
2010-09-14 10:12 ` G, Manjunath Kondaiah
2010-09-17 5:05 ` G, Manjunath Kondaiah
2010-09-17 7:24 ` Cousson, Benoit [this message]
2010-09-17 8:09 ` G, Manjunath Kondaiah
2010-09-17 10:29 ` Cousson, Benoit
2010-09-17 11:28 ` G, Manjunath Kondaiah
2010-09-17 14:51 ` Cousson, Benoit
2010-09-17 15:32 ` Kevin Hilman
2010-09-18 1:19 ` G, Manjunath Kondaiah
2010-09-18 1:10 ` G, Manjunath Kondaiah
2010-09-17 15:45 ` Cousson, Benoit
2010-09-18 1:15 ` G, Manjunath Kondaiah
2010-08-24 11:04 ` [PATCH v2 10/11] OMAP: DMA: Use DMA device attributes Manjunatha GK
2010-09-03 20:45 ` Kevin Hilman
2010-09-07 11:47 ` G, Manjunath Kondaiah
2010-08-24 11:04 ` [PATCH v2 11/11] sDMA: descriptor autoloading feature Manjunatha GK
2010-09-03 16:21 ` [PATCH v2 00/11] OMAP: DMA: HWMOD and DMA as platform driver G, Manjunath Kondaiah
2010-09-03 16:39 ` Cousson, Benoit
2010-09-07 11:46 ` G, Manjunath Kondaiah
2010-09-03 16:44 ` Kevin Hilman
2010-09-03 22:49 ` Kevin Hilman
2010-09-07 11:48 ` G, Manjunath Kondaiah
2010-09-08 8:43 ` G, Manjunath Kondaiah
2010-09-03 20:38 ` Kevin Hilman
2010-09-07 11:47 ` G, Manjunath Kondaiah
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C9317B5.3050308@ti.com \
--to=b-cousson@ti.com \
--cc=khilman@deeprootsystems.com \
--cc=linux-omap@vger.kernel.org \
--cc=manjugk@ti.com \
--cc=santosh.shilimkar@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.