linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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


  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).