Re: [PATCH 1/2] ARM: dts: arria10: update NAND clocking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2018-07-21 8:16 GMT+09:00 Dinh Nguyen <dinguyen@xxxxxxxxxx>:
>
>
> On 07/18/2018 09:22 PM, Masahiro Yamada wrote:
>> 2018-07-11 23:51 GMT+09:00 Dinh Nguyen <dinh.linux@xxxxxxxxx>:
>>> Hi Masahiro,
>>>
>>> On Tue, Jul 10, 2018 at 9:45 PM Masahiro Yamada
>>> <yamada.masahiro@xxxxxxxxxxxxx> wrote:
>>>>
>>>> 2018-07-10 22:35 GMT+09:00 Dinh Nguyen <dinguyen@xxxxxxxxxx>:
>>>>>
>>>>>
>>>>> On 07/09/2018 08:31 PM, Masahiro Yamada wrote:
>>>>>> 2018-07-10 7:41 GMT+09:00 Dinh Nguyen <dinguyen@xxxxxxxxxx>:
>>>>>>> The NAND IP needs 2 clocks(nand_x_clk and nand_clk). This patch adds a
>>>>>>> nand_x_clk, which is derived from the nand_clk, but has a fixed divider
>>>>>>> of 4.
>>>>>>>
>>>>>>> Update the NAND node to use the additional clock.
>>>>>>>
>>>>>>> Signed-off-by: Dinh Nguyen <dinguyen@xxxxxxxxxx>
>>>>>>> ---
>>>>>>>  arch/arm/boot/dts/socfpga_arria10.dtsi | 13 +++++++++++--
>>>>>>>  1 file changed, 11 insertions(+), 2 deletions(-)
>>>>>>>
>>>>>>> diff --git a/arch/arm/boot/dts/socfpga_arria10.dtsi b/arch/arm/boot/dts/socfpga_arria10.dtsi
>>>>>>> index a4dcb68..558b5ea 100644
>>>>>>> --- a/arch/arm/boot/dts/socfpga_arria10.dtsi
>>>>>>> +++ b/arch/arm/boot/dts/socfpga_arria10.dtsi
>>>>>>> @@ -377,13 +377,21 @@
>>>>>>>                                                 clk-gate = <0xC8 11>;
>>>>>>>                                         };
>>>>>>>
>>>>>>> -                                       nand_clk: nand_clk {
>>>>>>> +                                       nand_x_clk: nand_x_clk {
>>>>>>>                                                 #clock-cells = <0>;
>>>>>>>                                                 compatible = "altr,socfpga-a10-gate-clk";
>>>>>>>                                                 clocks = <&l4_mp_clk>;
>>>>>>>                                                 clk-gate = <0xC8 10>;
>>>>>>>                                         };
>>>>>>>
>>>>>>> +                                       nand_clk: nand_clk {
>>>>>>> +                                               #clock-cells = <0>;
>>>>>>> +                                               compatible = "altr,socfpga-a10-gate-clk";
>>>>>>> +                                               clocks = <&nand_x_clk>;
>>>>>>> +                                               fixed-divider = <4>;
>>>>>>> +                                               clk-gate = <0xC8 10>;
>>>>>>> +                                       };
>>>>>>> +
>>>>>>>                                         spi_m_clk: spi_m_clk {
>>>>>>>                                                 #clock-cells = <0>;
>>>>>>>                                                 compatible = "altr,socfpga-a10-gate-clk";
>>>>>>> @@ -650,7 +658,8 @@
>>>>>>>                         reg-names = "nand_data", "denali_reg";
>>>>>>>                         interrupts = <0 99 4>;
>>>>>>>                         dma-mask = <0xffffffff>;
>>>>>>> -                       clocks = <&nand_clk>;
>>>>>>> +                       clocks = <&nand_clk>, <&nand_x_clk>;
>>>>>>> +                       clock-names = "nand", "nand_x";
>>>>>>
>>>>>>
>>>>>> Doesn't SOCFPGA really need the ECC clock?
>>>>>>
>>>>>
>>>>> I don't see any mentions of an ECC clock in any of the SoCFPGA
>>>>> documentation for the NAND IP.
>>>>
>>>>
>>>> I'd like you to check the IP documentation
>>>> published by Denali (or Cadence),
>>>> not published by Altera.
>>>>
>>>> Is it available for you?
>>>>
>>>>
>>>>
>>>> In my SoCs, the same clock signal (nand-clk-200m)
>>>> is connected to clk_x and ecc_clk, like this:
>>>>
>>>>                                          -------------
>>>> --------------                           | DENALI IP |
>>>> |            |                           |           |
>>>> | clk        |---(nand-clk-50m)--------->| clk       |
>>>> | controller |                           |           |
>>>> |            |---(nand-clk-200m)-------->| clk_x     |
>>>> --------------                       |   |           |
>>>>                                      --->| ecc_clk   |
>>>>                                          |           |
>>>>                                          -------------
>
> Here's a diagram of the clocking for the NAND IP on SOCFPGA.
>
>                                       -------------
> --------------                        | DENALI IP    |
> |            |                        |              |
> | clk        |                        | |-->clk(/4)  |
> | controller |                        | |            |
> |            |---(nand_clk)-------------|-->clk_x    |
> -------------                         | |            |
>                                       | |-->ecc_clk  |
>                                       |              |
>                                       ---------------
>
> From the clock controller, it provides a single 200MHz clock to the NAND
> IP. Inside the NAND IP, there is a /4 for the clk. The 200MHz clock is
> used for the clk_x and ecc_clk.
>
> The nand-clk is the only clock that can be gated.


The Denali IP does not contain the divisor in it.

My best guess is Altera implemented a simple
wrapper with the 1/4 divisor, like this?


               ----------------------------
               | Wrapper                  |
               |            ------------- |
               |            | DENALI IP | |
               |            |           | |
               |  |-(1/4)-->| clk       | |
               |  |         |           | |
---(nand_clk)--|--|-------->| clk_x     | |
               |  |         |           | |
               |  |-------->| ecc_clk   | |
               |            |           | |
               |            ------------- |
               ----------------------------


>>>>
>>>>
>>>> Some clock lines are often tied-up,
>>>> but such low-level information does not appear in
>>>> user documents.
>>>> I talked to a hardware engineer to get this information.
>>>>
>>>>
>>>>
>>>> I guess the situation is similar for your case,
>>>> but I do not have information enough to argue this.
>>>>
>>>
>>> I don't disagree with this representation. But after asking around,
>>> I'm getting the impression that the ECC clock is not exposed to the
>>> clock manager. This implies that the clock is always turned on and
>>> there doesn't seem to be any software control for it. I tested ECC
>>> with this patch and it looks to be working correctly, without any ecc
>>> clock representation.
>>>
>>> I'm not sure if I should expose a dummy ecc_clk to satisfy the binding?
>>
>>
>> DT should represent the real HW.
>> If the Denali IP in SOCFPGA needs ecc_clk input,
>> DT should describe it.
>>
>>
>> I do not have knowledge about the SOCFPGA internals.
>> I do not know which is correct:
>>
>>   - The Denali IP in SOCFPGA needs ecc_clk,
>>     but there is no software control for it.
>>
>>   - The Denali IP in SOCFPGA does not need ecc_clk.
>>
>
> So should I be representing the clocks even though it doesn't come from
> the clock controller?


Anyway, you know the same clock is connected to nand_x to ecc_clk.

So, there is no problem for adding "ecc" as well, right?


-- 
Best Regards
Masahiro Yamada
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux