linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 07/18] dmaengine/amba-pl08x: Enable/Disable amba_pclk with channel requests
Date: Sun, 31 Jul 2011 18:04:51 +0100	[thread overview]
Message-ID: <20110731170451.GC2975@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <CAKnu2MppEKxZD2Z77tfShMfG80d-Xx26yBGhZtJkJ2C6SjE=1w@mail.gmail.com>

On Sun, Jul 31, 2011 at 02:04:47AM +0200, Linus Walleij wrote:
> 2011/7/31 Linus Walleij <linus.walleij@linaro.org>:
> > 2011/7/30 Russell King - ARM Linux <linux@arm.linux.org.uk>:
> >> On Sat, Jul 30, 2011 at 01:07:40PM +0100, Russell King - ARM Linux wrote:
> >>> It may make better sense to convert this to runtime PM. ?I suspect
> >>> that there's core support which the amba/bus.c can do to help in that
> >>> respect (eg, managing the apb pclk itself) so that we don't have to
> >>> add the same code to every primecell driver.
> >>
> >> Something like this for the bus driver (untested):
> >>
> >> ?drivers/amba/bus.c | ? 38 ++++++++++++++++++++++++++++++++++++--
> >> ?1 files changed, 36 insertions(+), 2 deletions(-)
> >
> > I think the pm_runtime_* code Rabin put in place inside
> > drivers/spi/spi-pl022.c would play really well with this approach, and
> > just work, so:
> > Acked-by: Linus Walleij <linus.walleij@linaro.org>
> 
> ..and while it will just cause some double refcounts on the clock,
> it makes sense to delete the pclk manipulation from the PL022
> driver code as part of the patch, like this:

Yes, this looks fine.  Shall I wrap it up as part of my patch?

Two other things I've spotted in this driver are:

1. The remove function doesn't undo what the probe function did to
the pclk and vcore.  It needs to keep things balanced.  For a driver
which doesn't manage its pclk, this is what happens:
	- core gets pclk
	- core enables pclk
	- core calls driver's probe
		- driver sets stuff up
...
	- core calls driver's remove
		- driver tidies up
	- core disables pclk
	- core puts pclk

And PL022 does this:
	- core gets pclk
	- core enables pclk
	- core calls driver's probe
		- driver sets stuff up
		- driver disables pclk
...
	- core calls driver's remove
		- driver tidies up
	- core disables pclk
	- core puts pclk

Notice the double-disable of pclk in that sequence.  If ->probe disables
pclk, ->remove needs to return with that disable balanced with an enable.

2. It thinks it can refuse 'remove' by returning an error code.  This
is false.  removes can't be aborted - here's the code from drivers/base/dd.c:

static void __device_release_driver(struct device *dev)
{
...
                if (dev->bus && dev->bus->remove)
                        dev->bus->remove(dev);
                else if (drv->remove)
                        drv->remove(dev);
...
}

Notice how return codes go nowhere.  remove should _really_ be a void
function to stop people thinking that it can be aborted.  It can't.

  reply	other threads:[~2011-07-31 17:04 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-29 10:49 [PATCH 00/18] dmaengine/amba-pl08x updates Viresh Kumar
2011-07-29 10:49 ` [PATCH 01/18] ARM: asm/pl080.h: Protect against multiple inclusion of header file Viresh Kumar
2011-07-30 22:16   ` Linus Walleij
2011-07-29 10:49 ` [PATCH 02/18] dmaengine/amba-pl08x: Resolve formatting issues Viresh Kumar
2011-07-29 11:00   ` Russell King - ARM Linux
2011-07-29 11:21     ` viresh kumar
2011-07-29 12:05   ` Koul, Vinod
2011-07-29 15:25     ` viresh kumar
2011-07-29 10:49 ` [PATCH 03/18] dmaengine/amba-pl08x: Complete doc comment for struct pl08x_txd Viresh Kumar
2011-07-29 10:49 ` [PATCH 04/18] dmaengine/amba-pl08x: Remove redundant comment and rewrite original Viresh Kumar
2011-07-29 12:09   ` Koul, Vinod
2011-07-29 15:47     ` viresh kumar
2011-07-29 16:34       ` Russell King - ARM Linux
2011-07-30 22:32       ` Linus Walleij
2011-07-30 22:57         ` Russell King - ARM Linux
2011-07-30 23:37           ` Linus Walleij
2011-07-31  5:51             ` viresh kumar
2011-07-31  9:06             ` Russell King - ARM Linux
2011-07-29 10:49 ` [PATCH 05/18] dmaengine/amba-pl08x: Changing few prints to dev_dbg from dev_info Viresh Kumar
2011-07-30 22:34   ` Linus Walleij
2011-07-29 10:49 ` [PATCH 06/18] dmaengine/amba-pl08x: Simplify pl08x_ensure_on() Viresh Kumar
2011-07-30 22:36   ` Linus Walleij
2011-07-29 10:49 ` [PATCH 07/18] dmaengine/amba-pl08x: Enable/Disable amba_pclk with channel requests Viresh Kumar
2011-07-30 12:07   ` Russell King - ARM Linux
2011-07-30 13:05     ` Russell King - ARM Linux
2011-07-30 23:53       ` Linus Walleij
2011-07-31  0:04         ` Linus Walleij
2011-07-31 17:04           ` Russell King - ARM Linux [this message]
2011-08-02  9:05             ` Linus Walleij
2011-08-03 12:55               ` Russell King - ARM Linux
2011-08-09 19:50                 ` Linus Walleij
2011-07-29 10:49 ` [PATCH 08/18] dmaengine/amba-pl08x: No need to check "ch->signal < 0" Viresh Kumar
2011-07-31  0:09   ` Linus Walleij
2011-07-29 10:49 ` [PATCH 09/18] dmaengine/amba-pl08x: Schedule tasklet in case of error interrupt Viresh Kumar
2011-07-29 12:16   ` Koul, Vinod
2011-07-29 13:02     ` Russell King - ARM Linux
2011-07-29 15:30     ` viresh kumar
2011-08-04  4:25       ` Koul, Vinod
2011-08-04  5:54         ` viresh kumar
2011-08-04  5:32           ` Koul, Vinod
2011-08-14  8:29             ` Russell King - ARM Linux
2011-07-31  0:19   ` Linus Walleij
2011-07-31  5:33     ` viresh kumar
2011-07-29 10:49 ` [PATCH 10/18] dmaengine/amba-pl08x: Get rid of pl08x_pre_boundary() Viresh Kumar
2011-07-29 11:05   ` Russell King - ARM Linux
2011-07-29 12:32     ` Koul, Vinod
2011-07-29 15:58       ` viresh kumar
2011-07-29 12:19   ` Koul, Vinod
2011-07-29 15:40     ` viresh kumar
2011-07-31  0:24   ` Linus Walleij
2011-07-29 10:49 ` [PATCH 11/18] dmaengine/amba-pl08x: max_bytes_per_lli is TRANSFER_SIZE * src_width (not MIN(width)) Viresh Kumar
2011-07-31  0:27   ` Linus Walleij
2011-07-31  9:09     ` Russell King - ARM Linux
2011-07-29 10:49 ` [PATCH 12/18] dmaengine/amba-pl08x: Add prep_single_byte_llis() routine Viresh Kumar
2011-07-29 11:06   ` Russell King - ARM Linux
2011-07-29 11:30     ` viresh kumar
2011-07-29 10:49 ` [PATCH 13/18] dmaengine/amba-pl08x: Align lli_len to max(src.width, dst.width) Viresh Kumar
2011-07-29 12:43   ` Koul, Vinod
2011-07-29 15:39     ` viresh kumar
2011-07-31  0:30   ` Linus Walleij
2011-07-29 10:49 ` [PATCH 14/18] dmaengine/amba-pl08x: Choose peripheral bus as master bus Viresh Kumar
2011-07-31  0:36   ` Linus Walleij
2011-07-29 10:49 ` [PATCH 15/18] dmaengine/amba-pl08x: Pass flow controller information with slave channel data Viresh Kumar
2011-07-29 11:10   ` Russell King - ARM Linux
2011-07-29 11:31     ` viresh kumar
2011-07-31  0:40   ` Linus Walleij
2011-07-31  5:36     ` viresh kumar
2011-07-29 10:49 ` [PATCH 16/18] dmaengine/amba-pl08x: Add support for sg len greater than one for slave transfers Viresh Kumar
2011-07-31  0:41   ` Linus Walleij
2011-08-14  8:36   ` Russell King - ARM Linux
2011-08-15 10:11     ` Linus Walleij
2011-08-18  8:38     ` Viresh Kumar
2011-08-21  8:33       ` Russell King - ARM Linux
2011-08-23  4:22         ` Viresh Kumar
2011-08-23  5:20           ` Koul, Vinod
2011-08-26  3:41           ` Viresh Kumar
2011-08-26  8:03             ` Linus Walleij
2011-08-26  8:51               ` Viresh Kumar
2011-09-01 10:07                 ` Viresh Kumar
2011-09-07 18:42                   ` Koul, Vinod
2011-09-07 23:01                     ` Linus Walleij
2011-09-08  3:50                       ` Viresh Kumar
2011-09-08 10:29                         ` Linus Walleij
2011-09-08 21:54                           ` [PATCH 16/18] dmaengine/ambhe rest oa-pl08x: " Vinod Koul
2011-09-20  6:19                             ` Vinod Koul
2011-09-20  6:27                               ` Viresh Kumar
2011-09-20  8:08                                 ` Vinod Koul
2011-07-29 10:49 ` [PATCH 17/18] dmaengine/amba-pl08x: Check txd->llis_va before freeing dma_pool Viresh Kumar
2011-07-31  0:44   ` Linus Walleij
2011-07-29 10:49 ` [PATCH 18/18] dmaengine/amba-pl08x: Call pl08x_free_txd() instead of calling kfree() directly Viresh Kumar
2011-07-29 11:15   ` Russell King - ARM Linux
2011-07-29 11:38     ` viresh kumar
2011-07-31  0:45   ` Linus Walleij
2011-07-31  5:39     ` viresh kumar
2011-07-29 10:57 ` [PATCH 00/18] dmaengine/amba-pl08x updates Russell King - ARM Linux
2011-07-29 11:14   ` viresh kumar
2011-07-29 11:19     ` Russell King - ARM Linux
2011-07-29 11:23       ` viresh kumar
2011-07-29 12:43         ` Russell King - ARM Linux
2011-07-29 15:22           ` viresh kumar
2011-07-29 11:58 ` Koul, Vinod
2011-08-01  5:30   ` viresh kumar

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=20110731170451.GC2975@n2100.arm.linux.org.uk \
    --to=linux@arm.linux.org.uk \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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).