linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Lior Amsalem <alior@marvell.com>,
	Jason Cooper <jason@lakedaemon.net>, Andrew Lunn <andrew@lunn.ch>,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	Rob Herring <rob.herring@calxeda.com>,
	Ben Dooks <ben.dooks@codethink.co.uk>,
	devicetree-discuss@lists.ozlabs.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v4 02/10] pinctrl: mvebu: dove pinctrl driver
Date: Tue, 18 Jun 2013 14:01:39 +0200	[thread overview]
Message-ID: <51C04C23.4090807@gmail.com> (raw)
In-Reply-To: <20130618113606.GA26763@n2100.arm.linux.org.uk>

On 06/18/13 13:36, Russell King - ARM Linux wrote:
> On Thu, Sep 13, 2012 at 05:41:44PM +0200, Sebastian Hesselbarth wrote:
>> +#define DOVE_GLOBAL_CONFIG_1		(DOVE_SB_REGS_VIRT_BASE | 0xe802C)
>> +#define  DOVE_TWSI_ENABLE_OPTION1	BIT(7)
>> +#define DOVE_GLOBAL_CONFIG_2		(DOVE_SB_REGS_VIRT_BASE | 0xe8030)
>> +#define  DOVE_TWSI_ENABLE_OPTION2	BIT(20)
>> +#define  DOVE_TWSI_ENABLE_OPTION3	BIT(21)
>> +#define  DOVE_TWSI_OPTION3_GPIO		BIT(22)
> ...

Russell,

the above absolute addresses already made me think of cleaning up dove
pinctrl a while ago. I also had in mind that below function exclusively
request ownership of global config registers.

>> +static int dove_twsi_ctrl_set(struct mvebu_mpp_ctrl *ctrl,
>> +				unsigned long config)
>> +{
>> +	unsigned long gcfg1 = readl(DOVE_GLOBAL_CONFIG_1);
>> +	unsigned long gcfg2 = readl(DOVE_GLOBAL_CONFIG_2);
>> +
>> +	gcfg1 &= ~DOVE_TWSI_ENABLE_OPTION1;
>> +	gcfg2 &= ~(DOVE_TWSI_ENABLE_OPTION2 | DOVE_TWSI_ENABLE_OPTION2);
>> +
>> +	switch (config) {
>> +	case 1:
>> +		gcfg1 |= DOVE_TWSI_ENABLE_OPTION1;
>> +		break;
>> +	case 2:
>> +		gcfg2 |= DOVE_TWSI_ENABLE_OPTION2;
>> +		break;
>> +	case 3:
>> +		gcfg2 |= DOVE_TWSI_ENABLE_OPTION3;
>> +		break;
>> +	}
>> +
>> +	writel(gcfg1, DOVE_GLOBAL_CONFIG_1);
>> +	writel(gcfg2, DOVE_GLOBAL_CONFIG_2);
>> +
>> +	return 0;
>> +}
>
> So, I've just been thinking about the LCD clocking on the Armada 510,
> and found that there's dividers for the internal LCD clocks in the
> global config 1/2 registers.  So I grepped the kernel source for
> references to these, expecting to find something in drivers/clk, but
> found the above.

We have no peripheral clock handling for Dove, yet. Just core clocks and
clock gates are implemented. And I guess they are DT only anyway.

> However, todays kernel is sometimes SMP, commonly with kernel preemption
> enabled, maybe even RT.  This makes things like the above sequence a
> problem where a multifunction register is read, modified and then
> written back.
>
> Consider two threads doing this, and a preemption event happening in the
> middle of this sequence to another thread also doing a read-modify-write
> of the same register.  Which one wins depends on the preemption sequence,
> but ultimately one loses out.

Yeah, sure. We have the same issue with watchdog driver messing with
timer registers. There I exported a function to _clrset TIMER_CTRL
register safely. Just went into irqchip (tip for-next).

> Any access to such registers needs careful thought, and protection in some
> manner.
>
> Maybe what we need is something like this:
>
> static DEFINE_SPINLOCK(io_lock);
> static void modifyl(u32 new, u32 mask, void __iomem *reg)
> {
> 	unsigned long flags;
> 	u32 val;
>
> 	spin_lock_irqsave(&io_lock, flags);
> 	val = readl(reg) & ~mask;
> 	val |= new | mask;
> 	writel(val, reg);
> 	spin_unlock_irqrestore(&io_lock, flags);
> }
>
> in order to provide arbitrated access to these kinds of multifunction
> registers in a safe, platform agnostic way.

I am fine with a generic modify function with a single lock. Most cases
should be fine with a single lock even for non-related register
accesses, e.g. watchdog will access TIMER_CTRL only once to enable
itself. If you think you need a special lock because you have a lot of
writes to shared registers, you can still have your own modify lock.

Sebastian

  reply	other threads:[~2013-06-18 12:01 UTC|newest]

Thread overview: 136+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-11 12:56 [PATCH 00/11] pinctrl: mvebu: pinctrl driver Sebastian Hesselbarth
2012-08-11 12:56 ` [PATCH 01/11] pinctrl: mvebu: pinctrl driver core Sebastian Hesselbarth
2012-08-20  9:09   ` Linus Walleij
2012-08-20  9:46     ` Sebastian Hesselbarth
2012-08-20 12:51       ` Thomas Petazzoni
2012-08-20 14:18       ` Linus Walleij
2012-08-20 14:51         ` Sebastian Hesselbarth
2012-08-25  8:22     ` Andrew Lunn
2012-08-20 14:11   ` Linus Walleij
2012-08-11 12:56 ` [PATCH 02/11] pinctrl: mvebu: dove pinctrl driver Sebastian Hesselbarth
2012-08-20 13:43   ` Linus Walleij
2012-08-20 14:43     ` Sebastian Hesselbarh
2012-08-20 17:16     ` Thomas Petazzoni
2012-08-11 12:56 ` [PATCH 03/11] pinctrl: mvebu: kirkwood " Sebastian Hesselbarth
2012-08-20 13:49   ` Linus Walleij
2012-08-27 13:43     ` Ben Dooks
2012-08-27 19:19       ` Sebastian Hesselbarth
2012-08-27 20:02         ` Stephen Warren
2012-08-11 12:56 ` [PATCH 04/11] pinctrl: mvebu: add pinctrl driver for Armada 370 Sebastian Hesselbarth
2012-08-20 14:25   ` Linus Walleij
2012-08-20 16:48     ` Sebastian Hesselbarth
2012-08-20 17:36       ` Thomas Petazzoni
2012-08-20 18:01         ` Sebastian Hesselbarth
2012-08-20 18:51           ` Thomas Petazzoni
2012-08-21  7:12         ` Gregory CLEMENT
2012-08-11 12:56 ` [PATCH 05/11] pinctrl: mvebu: add pinctrl driver for Armada XP Sebastian Hesselbarth
2012-08-20 14:26   ` Linus Walleij
2012-08-11 12:56 ` [PATCH 06/11] ARM: mvebu: add pinctrl device in DT for Armada 370/XP SoCs Sebastian Hesselbarth
2012-08-20 14:27   ` Linus Walleij
2012-08-11 12:56 ` [PATCH 07/11] ARM: mvebu: Add pinctrl support to Armada XP SoCs Sebastian Hesselbarth
2012-08-20 14:27   ` Linus Walleij
2012-08-11 12:56 ` [PATCH 08/11] ARM: mvebu: Add pinctrl support to Armada 370 SoC Sebastian Hesselbarth
2012-08-20 14:28   ` Linus Walleij
2012-08-11 12:56 ` [PATCH 09/11] ARM: mvebu: adjust Armada XP evaluation board DTS Sebastian Hesselbarth
2012-08-20 14:28   ` Linus Walleij
2012-08-11 12:56 ` [PATCH 10/11] arm: mvebu: enable PINCTRL usage Sebastian Hesselbarth
2012-08-20 14:29   ` Linus Walleij
2012-08-11 12:56 ` [PATCH 11/11] arm: mvebu: add pinctrl support in defconfig Sebastian Hesselbarth
2012-08-20 14:31   ` Linus Walleij
2012-08-20 14:54     ` Sebastian Hesselbarth
2012-08-20 17:37       ` Thomas Petazzoni
2012-08-20  8:12 ` [PATCH 00/11] pinctrl: mvebu: pinctrl driver Linus Walleij
2012-08-22  8:22 ` [PATCH v2 0/9] " Sebastian Hesselbarth
2012-08-22  8:22   ` [PATCH v2 1/9] pinctrl: mvebu: pinctrl driver core Sebastian Hesselbarth
2012-08-22 20:43     ` Stephen Warren
2012-08-23  9:45       ` Sebastian Hesselbarth
2012-08-23 17:54         ` Stephen Warren
2012-08-23 20:31           ` Sebastian Hesselbarth
2012-08-23 21:26             ` Stephen Warren
2012-08-23 23:01               ` Sebastian Hesselbarth
2012-08-24  3:34                 ` Stephen Warren
2012-08-25 15:53                   ` Sebastian Hesselbarth
2012-08-27  4:33                     ` Stephen Warren
2012-09-02  7:30                       ` Linus Walleij
2012-09-02  8:27                         ` Sebastian Hesselbarth
2012-09-03  9:32                           ` Linus Walleij
2012-09-03 19:47                           ` Jason Cooper
2012-09-09 19:56                           ` Jason Cooper
2012-08-22  8:22   ` [PATCH v2 2/9] pinctrl: mvebu: dove pinctrl driver Sebastian Hesselbarth
2012-08-22  8:22   ` [PATCH v2 3/9] pinctrl: mvebu: kirkwood " Sebastian Hesselbarth
2012-08-22  8:22   ` [PATCH v2 4/9] pinctrl: mvebu: add pinctrl driver for Armada 370 Sebastian Hesselbarth
2012-08-22  8:22   ` [PATCH v2 5/9] pinctrl: mvebu: add pinctrl driver for Armada XP Sebastian Hesselbarth
2012-08-22  8:22   ` [PATCH v2 6/9] ARM: mvebu: add pinctrl device in DT for Armada 370/XP SoCs Sebastian Hesselbarth
2012-08-22  8:22   ` [PATCH v2 7/9] ARM: mvebu: Add pinctrl support to Armada XP SoCs Sebastian Hesselbarth
2012-08-22 20:45     ` Stephen Warren
2012-08-22  8:22   ` [PATCH v2 8/9] ARM: mvebu: Add pinctrl support to Armada 370 SoC Sebastian Hesselbarth
2012-08-22 20:46     ` Stephen Warren
2012-08-22  8:22   ` [PATCH v2 9/9] ARM: mvebu: adjust Armada XP evaluation board DTS Sebastian Hesselbarth
2012-09-10  8:39   ` [PATCH v3 0/9] pinctrl: mvebu: pinctrl driver Sebastian Hesselbarth
2012-09-10  8:39     ` [PATCH v3 1/9] pinctrl: mvebu: pinctrl driver core Sebastian Hesselbarth
2012-09-10 15:39       ` Linus Walleij
2012-09-11 14:44       ` Thomas Petazzoni
2012-09-11 22:17         ` Stephen Warren
2012-09-12  6:04           ` Linus Walleij
2012-09-12  6:54           ` Thomas Petazzoni
2012-09-12 15:50             ` Linus Walleij
2012-09-12 16:01               ` Thomas Petazzoni
2012-09-12 16:17                 ` Linus Walleij
2012-09-12 21:10             ` Stephen Warren
2012-09-10  8:39     ` [PATCH v3 2/9] pinctrl: mvebu: dove pinctrl driver Sebastian Hesselbarth
2012-09-10 15:40       ` Linus Walleij
2012-09-11 22:18       ` Stephen Warren
2012-09-10  8:39     ` [PATCH v3 3/9] pinctrl: mvebu: kirkwood " Sebastian Hesselbarth
2012-09-10 15:42       ` Linus Walleij
2012-09-10  8:39     ` [PATCH v3 4/9] pinctrl: mvebu: add pinctrl driver for Armada 370 Sebastian Hesselbarth
2012-09-10 15:43       ` Linus Walleij
2012-09-10  8:39     ` [PATCH v3 5/9] pinctrl: mvebu: add pinctrl driver for Armada XP Sebastian Hesselbarth
2012-09-10 15:43       ` Linus Walleij
2012-09-10  8:39     ` [PATCH v3 6/9] ARM: mvebu: add pinctrl device in DT for Armada 370/XP SoCs Sebastian Hesselbarth
2012-09-11 22:23       ` Stephen Warren
2012-09-12  6:56         ` Thomas Petazzoni
2012-09-12 20:57           ` Stephen Warren
2012-09-10  8:39     ` [PATCH v3 7/9] ARM: mvebu: Add pinctrl support to Armada XP SoCs Sebastian Hesselbarth
2012-09-10  8:39     ` [PATCH v3 8/9] ARM: mvebu: Add pinctrl support to Armada 370 SoC Sebastian Hesselbarth
2012-09-10  8:39     ` [PATCH v3 9/9] ARM: mvebu: adjust Armada XP evaluation board DTS Sebastian Hesselbarth
2012-09-10 15:45     ` [PATCH v3 0/9] pinctrl: mvebu: pinctrl driver Linus Walleij
2012-09-10 15:57       ` Sebastian Hesselbarth
2012-09-13 15:41 ` [PATCH v4 00/10] " Sebastian Hesselbarth
2012-09-13 15:41   ` [PATCH v4 01/10] pinctrl: mvebu: pinctrl driver core Sebastian Hesselbarth
2012-09-13 15:41   ` [PATCH v4 02/10] pinctrl: mvebu: dove pinctrl driver Sebastian Hesselbarth
2013-06-18 11:36     ` Russell King - ARM Linux
2013-06-18 12:01       ` Sebastian Hesselbarth [this message]
2013-06-18 15:02       ` Linus Walleij
2013-06-18 15:11         ` Russell King - ARM Linux
2013-06-18 15:23           ` Linus Walleij
2013-06-18 18:33           ` Mark Brown
2012-09-13 15:41   ` [PATCH v4 03/10] pinctrl: mvebu: kirkwood " Sebastian Hesselbarth
2012-09-16  7:46     ` Andrew Lunn
2012-09-16  9:09       ` Sebastian Hesselbarth
2012-09-17  8:45         ` Linus Walleij
2012-09-20 15:30           ` Arnd Bergmann
2012-09-20 18:34             ` Andrew Lunn
2012-09-20 19:28             ` Linus Walleij
2012-09-20 19:36               ` Thomas Petazzoni
2012-09-20 19:51                 ` Andrew Lunn
2012-09-21 10:56                 ` Ben Dooks
2012-09-21 18:14                 ` Linus Walleij
2012-09-16 12:40       ` Jason Cooper
2012-09-17  1:55         ` Nicolas Pitre
2012-09-17  6:36           ` Sebastian Hesselbarth
2012-09-17  8:32             ` Andrew Lunn
2012-09-18 18:59     ` Andrew Lunn
2012-09-13 15:41   ` [PATCH v4 04/10] pinctrl: mvebu: add pinctrl driver for Armada 370 Sebastian Hesselbarth
2012-09-13 15:41   ` [PATCH v4 05/10] pinctrl: mvebu: add pinctrl driver for Armada XP Sebastian Hesselbarth
2012-09-13 15:41   ` [PATCH v4 06/10] ARM: mvebu: Add pinctrl support to Armada XP SoCs Sebastian Hesselbarth
2012-09-13 15:41   ` [PATCH v4 07/10] ARM: mvebu: Add pinctrl support to Armada 370 SoC Sebastian Hesselbarth
2012-09-13 15:41   ` [PATCH v4 08/10] ARM: mvebu: adjust Armada XP evaluation board DTS Sebastian Hesselbarth
2012-09-13 15:41   ` [PATCH v4 09/10] arm: mvebu: split Kconfig options for Armada 370 and XP Sebastian Hesselbarth
2012-09-13 15:41   ` [PATCH v4 10/10] arm: mvebu: select the pinctrl drivers for Armada 370 and Armada XP platforms Sebastian Hesselbarth
2012-09-13 15:48   ` [PATCH v4 00/10] pinctrl: mvebu: pinctrl driver Thomas Petazzoni
2012-09-14 16:41   ` Stephen Warren
2012-09-20  8:13 ` [PATCH 00/11] " Linus Walleij
2012-09-20  8:17   ` Sebastian Hesselbarth
2012-09-20  9:04     ` Thomas Petazzoni
2012-09-20 10:02       ` Andrew Lunn
2012-09-20 10:32         ` Thomas Petazzoni

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=51C04C23.4090807@gmail.com \
    --to=sebastian.hesselbarth@gmail.com \
    --cc=alior@marvell.com \
    --cc=andrew@lunn.ch \
    --cc=ben.dooks@codethink.co.uk \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=jason@lakedaemon.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=rob.herring@calxeda.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).