linux-api.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Daniel Thompson <daniel.thompson@linaro.org>
To: Maxime Coquelin <mcoquelin.stm32@gmail.com>,
	Arnd Bergmann <arnd@arndb.de>
Cc: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Andreas Färber" <afaerber@suse.de>,
	"Geert Uytterhoeven" <geert@linux-m68k.org>,
	"Rob Herring" <robh+dt@kernel.org>,
	"Philipp Zabel" <p.zabel@pengutronix.de>,
	"Linus Walleij" <linus.walleij@linaro.org>,
	"Stefan Agner" <stefan@agner.ch>,
	"Peter Meerwald" <pmeerw@pmeerw.net>,
	"Paul Bolle" <pebolle@tiscali.nl>,
	"Peter Hurley" <peter@hurleysoftware.com>,
	"Andy Shevchenko" <andy.shevchenko@gmail.com>,
	"Chanwoo Choi" <cw00.choi@samsung.com>,
	"Russell King" <linux@arm.linux.org.uk>,
	"Daniel Lezcano" <daniel.lezcano@linaro.org>,
	"Joe Perches" <joe@perches.com>,
	"Vladimir Zapolskiy" <vladimir_zapolskiy@mentor.com>,
	"Lee Jones" <lee.jones@linaro.org>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"Pawel Moll" <pawel.moll@arm.com>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Ian Campbell" <ijc+devicetree@hellion.org.uk>
Subject: Re: [PATCH v8 14/16] ARM: dts: Introduce STM32F429 MCU
Date: Wed, 13 May 2015 20:29:12 +0100	[thread overview]
Message-ID: <5553A608.9080402@linaro.org> (raw)
In-Reply-To: <CALszF6CaO_yuNiSDuDV+4d2NRe_+32j=zcSE1HPhB1UH59cW9w@mail.gmail.com>

On 13/05/15 17:54, Maxime Coquelin wrote:
> 2015-05-13 18:37 GMT+02:00 Arnd Bergmann <arnd@arndb.de>:
>> On Wednesday 13 May 2015 18:29:05 Maxime Coquelin wrote:
>>> 2015-05-13 17:28 GMT+02:00 Arnd Bergmann <arnd@arndb.de>:
>>>> On Wednesday 13 May 2015 16:20:34 Daniel Thompson wrote:
>>>>>
>>>>> That would suit me very well (although is the 0x20/0x40 not the 8 that
>>>>> we would need in the middle column).
>>>>
>>>> We don't normally use register offsets in DT. The number 8 here instead
>>>> would indicate block 8, where each block is four bytes wide. Using the
>>>> same index here for reset and clock would also help readability.
>>>
>>> My view is that it makes the bindings usage very complex.
>>> Also, it implies we have a specific compatible for stm32f429, whereas
>>> we didn't need with my earlier proposals.
>>> Indeed, the reset driver will need to know the offset of every reset
>>> registers, because:
>>>    1. The AHB registers start at RCC offset 0x10 (up to 0x18)
>>>    2. The APB registers start at RCC offset 0x20 (up to 0x24).
>>> We have a gap between AHB and APB registers, so how do we map the
>>> index for the block you propose?
>>> Should the gap be considered as a block, or we should skip it?
>>>
>>> I'm afraid it will not be straightforward for a reset user to
>>> understand how to use this bindings.
>>>
>>> Either my v7 or v8 versions would have made possible to use a single
>>> compatible for STM32 series.
>>> If we stick with one of these, we could even think to have a "generic"
>>> reset driver, as it could be compatible with sunxi driver bindings.
>>
>> We should definitely try to use the same compatible string for all of
>> them, and make a binding that is easy to use.
>>
>> I haven't fully understood the requirements for the various parts that
>> are involved here. My understanding so far was that the driver could
>> use the index from the first cell and compute
>>
>>          void __iomem *reset_reg = rcc_base + 0x10 + 4 * index;
>>          void __iomem *clock_reg = rcc_base + 0x30 + 4 * index;
>
> This calculation is true, but we have to take into account there is a
> hole in the middle, between AHB3, and APB1 register:

... and equally importantly, only allows us to use hardware mappings for 
the gated clocks.

> AHB1RSTR : offset = 0x10, index = 0
> AHB2RSTR : offset = 0x14, index = 1
> AHB3RSTR : offset = 0x18, index = 2
> <HOLE >     : offset = 0x1c, index = 3
> APB1RSTR : offset = 0x20, index = 4
> APB2RSTR : offset = 0x24, index = 5
>
> So we have to carefully document this hole in the bindings, maybe by
> listing indexes in the documentation?

The register set has PLL, mux and dividers in the registers at 0x00, 
0x04 and 0x08.

Many of these clocks can be kept out of DT entirely because they are 
only there to feed other parts of the clock tree. However some of the 
dividers flow directly into cells that appear in device tree (such as 
the systick) and so we need to be able to reference them.

In other words the proposed mapping cannot allow us to express the 
dividers properly (because the index would have to be negative):
   void __iomem *clock_reg = rcc_base + 0x30 + 4 * index;

Thus I'd favour using different indexes for reset and clock bindings, 
both using the naive mapping function:
   void __iomem *reg =  rcc_base + 4 * index

I think that its so much easier to check against the datasheet like 
that. Admittedly is we follow the block-of-4-bytes idiom we have to 
divide a hex number by four but thats not so hard and we end up with:

		resets = <&rcc  8 0>;
		clocks = <&rcc 16 0>;

At the end of the day if we say we want to follow the datasheet, lets be 
do it in the most direct way properly.


Daniel.


PS
I've written a custom lookup function to to get from the DT index to an 
offset into the struct clk *array I'm using. That means I don't care 
much about any big holes in the register space.

>> Are there parts that need something else? If the 0x10 offset is
>> different, we probably want a different compatible string, and I'd
>> consider it a different part at that point. If there are chips
>> that do not spread the clock from the reset by exactly 256 bits,
>> we could add a DT property in the rcc node for that.
>
> I will check other chips, to see if this is valid generally.
>
> Thanks for your feedback,
> Maxime
>
>>
>>          Arnd

  parent reply	other threads:[~2015-05-13 19:29 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-09  7:53 [PATCH v8 00/16] Add support to STMicroelectronics STM32 family Maxime Coquelin
2015-05-09  7:53 ` [PATCH v8 01/16] scripts: link-vmlinux: Don't pass page offset to kallsyms if XIP Kernel Maxime Coquelin
2015-05-18 11:47   ` Maxime Coquelin
2015-05-20 23:04     ` Andreas Färber
     [not found]       ` <555D12F8.4000403-l3A5Bk7waGM@public.gmane.org>
2015-05-21  5:40         ` Michal Marek
2015-05-21  7:42           ` Maxime Coquelin
2015-05-22 20:20         ` Andreas Färber
2015-05-09  7:53 ` [PATCH v8 02/16] ARM: ARMv7-M: Enlarge vector table up to 256 entries Maxime Coquelin
2015-05-09  7:53 ` [PATCH v8 03/16] dt-bindings: Document the ARM System timer bindings Maxime Coquelin
2015-05-09  7:53 ` [PATCH v8 04/16] clocksource/drivers: Add ARM System timer driver Maxime Coquelin
2015-05-18 11:55   ` Maxime Coquelin
     [not found]     ` <CALszF6BiKwDKejfpVgs6ojTxC4LSRfLSEaszXTGVy7xfbHLHZg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-18 12:49       ` Daniel Lezcano
2015-05-18 12:57         ` Maxime Coquelin
2015-05-09  7:53 ` [PATCH v8 05/16] dt-bindings: mfd: Add STM32F4 RCC numeric constants into DT include file Maxime Coquelin
     [not found] ` <1431158038-3813-1-git-send-email-mcoquelin.stm32-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-05-09  7:53   ` [PATCH v8 06/16] dt-bindings: Document the STM32 reset bindings Maxime Coquelin
2015-05-09  7:53   ` [PATCH v8 15/16] ARM: configs: Add STM32 defconfig Maxime Coquelin
     [not found]     ` <1431158038-3813-16-git-send-email-mcoquelin.stm32-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-05-15 20:03       ` Arnd Bergmann
2015-05-09  7:53 ` [PATCH v8 07/16] drivers: reset: Add STM32 reset driver Maxime Coquelin
     [not found]   ` <1431158038-3813-8-git-send-email-mcoquelin.stm32-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-05-20 23:45     ` Andreas Färber
2015-05-21  7:46       ` Maxime Coquelin
2015-05-21 17:58         ` Andreas Färber
2015-05-21 19:57           ` Maxime Coquelin
2015-05-21 22:01             ` Andreas Färber
2015-05-22 14:04               ` Maxime Coquelin
2015-05-09  7:53 ` [PATCH v8 08/16] dt-bindings: Document the STM32 timer bindings Maxime Coquelin
2015-05-09  7:53 ` [PATCH v8 09/16] clockevents/drivers: Add STM32 Timer driver Maxime Coquelin
2015-05-18 12:59   ` Maxime Coquelin
2015-05-18 13:10   ` Daniel Lezcano
2015-05-18 14:03     ` Maxime Coquelin
2015-05-19  8:16       ` Daniel Lezcano
2015-05-19  8:55         ` Maxime Coquelin
     [not found]           ` <CALszF6CwGuKqgbX6gVrya1-_YOgvtrgC7pVqKTNjCRif_o532A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-19  9:06             ` Daniel Lezcano
2015-05-19  9:44               ` Maxime Coquelin
2015-05-19  9:59                 ` Daniel Lezcano
     [not found]                   ` <555B098A.8030202-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-05-19 10:02                     ` Maxime Coquelin
     [not found]                       ` <CALszF6AJ3Zf598wYeUx=iNWHHKT24xUyfagB=+4GocwZ-Fd-0g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-19 10:55                         ` Arnd Bergmann
2015-05-19 13:42                           ` Maxime Coquelin
2015-05-19 13:49                             ` Daniel Lezcano
2015-05-19 14:05                               ` Arnd Bergmann
2015-05-19 14:41                               ` Maxime Coquelin
2015-05-19 14:50                                 ` Russell King - ARM Linux
2015-05-19 15:34                                   ` Maxime Coquelin
     [not found]                                 ` <CALszF6A-De6dvcRNoa9ruL+y6Wt_rc7bi-O-VxHWkFF9NSt5_g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-19 15:03                                   ` Daniel Lezcano
2015-05-19 12:56                       ` Thomas Gleixner
2015-05-19 13:00                         ` Russell King - ARM Linux
     [not found]                           ` <20150519130028.GF2067-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2015-05-19 13:17                             ` Maxime Coquelin
2015-05-09  7:53 ` [PATCH v8 10/16] dt-bindings: Document the STM32 USART bindings Maxime Coquelin
2015-05-09  7:53 ` [PATCH v8 11/16] serial: stm32-usart: Add STM32 USART Driver Maxime Coquelin
2015-05-09 10:07   ` Andy Shevchenko
2015-05-18 13:05   ` Maxime Coquelin
2015-05-09  7:53 ` [PATCH v8 12/16] ARM: Add STM32 family machine Maxime Coquelin
     [not found]   ` <1431158038-3813-13-git-send-email-mcoquelin.stm32-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-05-15 19:57     ` Arnd Bergmann
2015-05-09  7:53 ` [PATCH v8 13/16] ARM: dts: Add ARM System timer as clocksource in armv7m Maxime Coquelin
2015-05-15 19:59   ` Arnd Bergmann
2015-05-09  7:53 ` [PATCH v8 14/16] ARM: dts: Introduce STM32F429 MCU Maxime Coquelin
2015-05-12 21:21   ` Arnd Bergmann
2015-05-13 11:45     ` Maxime Coquelin
     [not found]       ` <CALszF6CS8Q9DWX+ERtu=k=Bzr1-25N3oZQyWyxDZBF3an4nFKQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-13 12:58         ` Daniel Thompson
2015-05-13 13:27           ` Arnd Bergmann
2015-05-13 15:20             ` Daniel Thompson
2015-05-13 15:28               ` Arnd Bergmann
2015-05-13 16:29                 ` Maxime Coquelin
     [not found]                   ` <CALszF6DHazhN6+hGShyrmqtMrPod0hdb8mHAwK-GWfRxXzy7wQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-13 16:37                     ` Arnd Bergmann
2015-05-13 16:54                       ` Maxime Coquelin
     [not found]                         ` <CALszF6CaO_yuNiSDuDV+4d2NRe_+32j=zcSE1HPhB1UH59cW9w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-13 19:11                           ` Arnd Bergmann
2015-05-20 16:17                             ` Maxime Coquelin
2015-05-21 18:51                               ` Maxime Ripard
2015-05-22  9:06                               ` Philipp Zabel
2015-05-22  9:18                                 ` Maxime Ripard
2015-05-22 10:07                                   ` Philipp Zabel
2015-05-22 12:32                                     ` Maxime Coquelin
2015-05-22 12:43                                       ` Daniel Thompson
2015-05-22 13:09                                       ` Andreas Färber
2015-05-22 13:57                                         ` Maxime Coquelin
2015-05-22 14:06                                           ` Andreas Färber
2015-05-22 14:14                                           ` Daniel Thompson
2015-05-23  8:18                                     ` Maxime Ripard
2015-05-22  9:41                                 ` Maxime Coquelin
2015-05-13 19:29                         ` Daniel Thompson [this message]
     [not found]                           ` <5553A608.9080402-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-05-13 19:37                             ` Arnd Bergmann
2015-05-14 16:34                               ` Maxime Coquelin
2015-05-14 19:38                                 ` Daniel Thompson
2015-05-18 12:21                         ` Maxime Coquelin
2015-05-09  7:53 ` [PATCH v8 16/16] MAINTAINERS: Add entry for STM32 MCUs Maxime Coquelin
2015-05-15 19:58   ` Arnd Bergmann

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=5553A608.9080402@linaro.org \
    --to=daniel.thompson@linaro.org \
    --cc=afaerber@suse.de \
    --cc=andy.shevchenko@gmail.com \
    --cc=arnd@arndb.de \
    --cc=corbet@lwn.net \
    --cc=cw00.choi@samsung.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=geert@linux-m68k.org \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=joe@perches.com \
    --cc=lee.jones@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux@arm.linux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=mcoquelin.stm32@gmail.com \
    --cc=p.zabel@pengutronix.de \
    --cc=pawel.moll@arm.com \
    --cc=pebolle@tiscali.nl \
    --cc=peter@hurleysoftware.com \
    --cc=pmeerw@pmeerw.net \
    --cc=robh+dt@kernel.org \
    --cc=stefan@agner.ch \
    --cc=u.kleine-koenig@pengutronix.de \
    --cc=vladimir_zapolskiy@mentor.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).