[U-Boot] [PATCH 4/9] clk: exynos: add clock driver for Exynos7420 Soc

Thomas Abraham ta.omasab at gmail.com
Sat Apr 23 17:24:09 CEST 2016


Hi Simon,

On Wed, Apr 20, 2016 at 8:11 PM, Simon Glass <sjg at chromium.org> wrote:
> Hi Thomas,
>
> On 13 April 2016 at 04:43, Thomas Abraham <ta.omasab at gmail.com> wrote:
>> From: Thomas Abraham <thomas.ab at samsung.com>
>>
>> Add a clock driver for Exynos7420 SoC. There are about 25 clock controller
>> blocks in Exynos7420 out of which support for topc, top0 and peric1 blocks
>> are added in this initial version of the driver.
>>
>> Cc: Minkyu Kang <mk7.kang at samsung.com>
>> Cc: Simon Glass <sjg at chromium.org>
>> Signed-off-by: Thomas Abraham <thomas.ab at samsung.com>
>> ---
>>  drivers/clk/Kconfig                        |    1 +
>>  drivers/clk/Makefile                       |    1 +
>>  drivers/clk/exynos/Kconfig                 |   18 +++
>>  drivers/clk/exynos/Makefile                |    9 +
>>  drivers/clk/exynos/clk-exynos7420.c        |  227 ++++++++++++++++++++++++++++
>>  drivers/clk/exynos/clk-pll.c               |   35 +++++
>>  drivers/clk/exynos/clk-pll.h               |    9 +
>>  include/dt-bindings/clock/exynos7420-clk.h |  207 +++++++++++++++++++++++++
>>  8 files changed, 507 insertions(+), 0 deletions(-)
>>  create mode 100644 drivers/clk/exynos/Kconfig
>>  create mode 100644 drivers/clk/exynos/Makefile
>>  create mode 100644 drivers/clk/exynos/clk-exynos7420.c
>>  create mode 100644 drivers/clk/exynos/clk-pll.c
>>  create mode 100644 drivers/clk/exynos/clk-pll.h
>>  create mode 100644 include/dt-bindings/clock/exynos7420-clk.h
>>
>> diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
>> index a98b74b..6eee8eb 100644
>> --- a/drivers/clk/Kconfig
>> +++ b/drivers/clk/Kconfig
>> @@ -21,5 +21,6 @@ config SPL_CLK
>>           used as U-Boot proper.
>>
>>  source "drivers/clk/uniphier/Kconfig"
>> +source "drivers/clk/exynos/Kconfig"
>>
>>  endmenu
>> diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile
>> index c51db15..81fe600 100644
>> --- a/drivers/clk/Makefile
>> +++ b/drivers/clk/Makefile
>> @@ -11,3 +11,4 @@ obj-$(CONFIG_ROCKCHIP_RK3288) += clk_rk3288.o
>>  obj-$(CONFIG_SANDBOX) += clk_sandbox.o
>>  obj-$(CONFIG_MACH_PIC32) += clk_pic32.o
>>  obj-$(CONFIG_CLK_UNIPHIER) += uniphier/
>> +obj-$(CONFIG_CLK_EXYNOS) += exynos/
>> diff --git a/drivers/clk/exynos/Kconfig b/drivers/clk/exynos/Kconfig
>> new file mode 100644
>> index 0000000..eb0efa9
>> --- /dev/null
>> +++ b/drivers/clk/exynos/Kconfig
>> @@ -0,0 +1,18 @@
>> +config CLK_EXYNOS
>> +       bool
>> +       select CLK
>> +       help
>> +         This enables support for common clock driver API on Samsung
>> +         Exynos SoCs.
>> +
>> +menu "Clock drivers for Exynos SoCs"
>> +       depends on CLK_EXYNOS
>> +
>> +config CLK_EXYNOS7420
>> +       bool "Clock driver for Samsung's Exynos7420 SoC"
>> +       default y
>> +       help
>> +         This enables common clock driver support for platforms based
>> +         on Samsung Exynos7420 SoC.
>> +
>> +endmenu
>> diff --git a/drivers/clk/exynos/Makefile b/drivers/clk/exynos/Makefile
>> new file mode 100644
>> index 0000000..1df10fe
>> --- /dev/null
>> +++ b/drivers/clk/exynos/Makefile
>> @@ -0,0 +1,9 @@
>> +#
>> +# Copyright (C) 2016 Samsung Electronics
>> +# Thomas Abraham <thomas.ab at samsung.com>
>> +#
>> +# SPDX-License-Identifier:     GPL-2.0+
>> +#
>> +
>> +obj-y                          += clk-pll.o
>> +obj-$(CONFIG_CLK_EXYNOS7420)   += clk-exynos7420.o
>> diff --git a/drivers/clk/exynos/clk-exynos7420.c b/drivers/clk/exynos/clk-exynos7420.c
>> new file mode 100644
>> index 0000000..1feaea4
>> --- /dev/null
>> +++ b/drivers/clk/exynos/clk-exynos7420.c
>> @@ -0,0 +1,226 @@
>> +/*
>> + * Samsung Exynos7420 clock driver.
>> + * Copyright (C) 2016 Samsung Electronics
>> + * Thomas Abraham <thomas.ab at samsung.com>
>> + *
>> + * SPDX-License-Identifier:    GPL-2.0+
>> + */
>> +
>> +#include <common.h>
>> +#include <dm.h>
>> +#include <errno.h>
>> +#include <asm/io.h>
>> +#include <clk.h>
>> +#include "clk-pll.h"
>> +#include <dt-bindings/clock/exynos7420-clk.h>
>
> Please see include order.
>
>
> http://www.denx.de/wiki/U-Boot/CodingStyle
>> +
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +#define DIVIDER(reg, shift, mask)      \
>> +       (((readl(reg) >> shift) & mask) + 1)
>> +
>> +struct exynos7420_clk_cmu_topc {
>> +       unsigned int    rsvd1[68];
>> +       unsigned int    bus0_pll_con[2];
>> +       unsigned int    rsvd2[2];
>> +       unsigned int    bus1_pll_con[2];
>> +       unsigned int    rsvd3[54];
>> +       unsigned int    mux_sel[6];
>> +       unsigned int    rsvd4[250];
>> +       unsigned int    div[4];
>> +};
>> +
>> +struct exynos7420_clk_topc_priv {
>> +       struct exynos7420_clk_cmu_topc *topc;
>> +       unsigned long fin_freq;
>> +       unsigned long sclk_bus0_pll_a;
>> +       unsigned long sclk_bus1_pll_a;
>
> Comments on these members please.
>
>> +};
>> +
>> +static ulong exynos7420_topc_get_periph_rate(struct udevice *dev, int periph)
>> +{
>> +       struct exynos7420_clk_topc_priv *priv = dev_get_priv(dev);
>> +
>> +       switch (periph) {
>> +       case DOUT_SCLK_BUS0_PLL:
>> +       case SCLK_BUS0_PLL_A:
>> +       case SCLK_BUS0_PLL_B:
>> +               return priv->sclk_bus0_pll_a;
>> +       case DOUT_SCLK_BUS1_PLL:
>> +       case SCLK_BUS1_PLL_A:
>> +       case SCLK_BUS1_PLL_B:
>> +               return priv->sclk_bus1_pll_a;
>> +       default:
>> +               return 0;
>> +       }
>> +}
>> +
>> +static struct clk_ops exynos7420_clk_topc_ops = {
>> +       .get_periph_rate        = exynos7420_topc_get_periph_rate,
>> +};
>> +
>> +static int exynos7420_clk_topc_probe(struct udevice *dev)
>> +{
>> +       struct exynos7420_clk_topc_priv *priv;
>> +       struct exynos7420_clk_cmu_topc *topc;
>> +       struct udevice *clk_dev;
>> +       unsigned long rate;
>> +       fdt_addr_t base;
>> +       int ret;
>> +
>> +       priv = dev_get_priv(dev);
>> +       if (!priv)
>
> This cannot happen as it is auto-allocated.

Ok. This check will be removed.

>
>> +               return -EINVAL;
>
>> +
>> +       base = dev_get_addr(dev);
>> +       if (base == FDT_ADDR_T_NONE)
>> +               return -EINVAL;
>> +
>> +       topc = (struct exynos7420_clk_cmu_topc *)base;
>> +       priv->topc = topc;
>> +
>> +       ret = clk_get_by_index(dev, 0, &clk_dev);
>> +       if (ret >= 0)
>> +               priv->fin_freq = clk_get_rate(clk_dev);
>> +
>> +       rate = pll145x_get_rate(&topc->bus0_pll_con[0], priv->fin_freq);
>> +       if (readl(&topc->mux_sel[1]) & (1 << 16))
>> +               rate >>= 1;
>> +       rate /= DIVIDER(&topc->div[3], 0, 0xf);
>> +       priv->sclk_bus0_pll_a = rate;
>> +
>> +       rate = pll145x_get_rate(&topc->bus1_pll_con[0], priv->fin_freq) /
>> +                       DIVIDER(&topc->div[3], 8, 0xf);
>> +       priv->sclk_bus1_pll_a = rate;
>> +
>> +       return 0;
>> +}
>> +
>> +static const struct udevice_id exynos7420_clk_topc_compat[] = {
>> +       { .compatible = "samsung,exynos7-clock-topc" },
>> +       { }
>> +};
>> +
>> +U_BOOT_DRIVER(exynos7420_clk_topc) = {
>> +       .name = "exynos7420-clock-topc",
>> +       .id = UCLASS_CLK,
>> +       .of_match = exynos7420_clk_topc_compat,
>> +       .probe = exynos7420_clk_topc_probe,
>> +       .priv_auto_alloc_size = sizeof(struct exynos7420_clk_topc_priv),
>> +       .ops = &exynos7420_clk_topc_ops,
>> +       .flags = DM_FLAG_PRE_RELOC,
>> +};
>> +
>> +struct exynos7420_clk_cmu_top0 {
>> +       unsigned int    rsvd0[128];
>> +       unsigned int    mux_sel[7];
>> +       unsigned int    rsvd1[261];
>> +       unsigned int    div_peric[5];
>> +};
>> +
>> +struct exynos7420_clk_top0_priv {
>> +       struct exynos7420_clk_cmu_top0 *top0;
>> +       unsigned long mout_top0_bus0_pll_half;
>> +       unsigned long sclk_uart2;
>> +};
>> +
>> +static ulong exynos7420_top0_get_periph_rate(struct udevice *dev, int periph)
>> +{
>> +       struct exynos7420_clk_top0_priv *priv = dev_get_priv(dev);
>> +       struct exynos7420_clk_cmu_top0 *top0 = priv->top0;
>> +
>> +       switch (periph) {
>> +       case CLK_SCLK_UART2:
>> +               return priv->mout_top0_bus0_pll_half /
>> +                       DIVIDER(&top0->div_peric[3], 8, 0xf);
>> +       default:
>> +               return 0;
>> +       }
>> +}
>> +
>> +static struct clk_ops exynos7420_clk_top0_ops = {
>> +       .get_periph_rate        = exynos7420_top0_get_periph_rate,
>> +};
>> +
>> +static int exynos7420_clk_top0_probe(struct udevice *dev)
>> +{
>> +       struct exynos7420_clk_top0_priv *priv;
>> +       struct exynos7420_clk_cmu_top0 *top0;
>> +       struct udevice *clk_dev;
>> +       fdt_addr_t base;
>> +       int ret;
>> +
>> +       priv = dev_get_priv(dev);
>> +       if (!priv)
>> +               return -EINVAL;
>> +
>> +       base = dev_get_addr(dev);
>> +       if (base == FDT_ADDR_T_NONE)
>> +               return -EINVAL;
>> +
>> +       top0 = (struct exynos7420_clk_cmu_top0 *)base;
>> +       priv->top0 = top0;
>> +
>> +       ret = clk_get_by_index(dev, 1, &clk_dev);
>> +       if (ret >= 0) {
>> +               priv->mout_top0_bus0_pll_half =
>> +                       clk_get_periph_rate(clk_dev, ret);
>> +               if (readl(&top0->mux_sel[1]) & (1 << 16))
>> +                       priv->mout_top0_bus0_pll_half >>= 1;
>> +       }
>> +
>> +       return 0;
>> +}
>> +
>> +static const struct udevice_id exynos7420_clk_top0_compat[] = {
>> +       { .compatible = "samsung,exynos7-clock-top0" },
>> +       { }
>> +};
>> +
>> +U_BOOT_DRIVER(exynos7420_clk_top0) = {
>
> It might be better to put all the U_BOOT_DRIVER() and compatible stuff
> at the end of the file?

Ok, will do this in the next version of the patch.

>
>> +       .name = "exynos7420-clock-top0",
>> +       .id = UCLASS_CLK,
>> +       .of_match = exynos7420_clk_top0_compat,
>> +       .probe = exynos7420_clk_top0_probe,
>> +       .priv_auto_alloc_size = sizeof(struct exynos7420_clk_top0_priv),
>> +       .ops = &exynos7420_clk_top0_ops,
>> +       .flags = DM_FLAG_PRE_RELOC,
>> +};
>> +
>> +static ulong exynos7420_peric1_get_periph_rate(struct udevice *dev, int periph)
>> +{
>> +       struct udevice *clk_dev;
>> +       unsigned int ret;
>> +
>> +       switch (periph) {
>> +       case SCLK_UART2:
>> +               ret = clk_get_by_index(dev, 3, &clk_dev);
>
> Shouldn't this be:
>
> if (ret < 0)
>   return ret;

Ok.

Thanks,
Thomas.

>
>> +               if (ret >= 0)
>> +                       return clk_get_periph_rate(clk_dev, ret);
>> +       default:
>> +               return 0;
>> +       }
>> +}
>> +
>> +static struct clk_ops exynos7420_clk_peric1_ops = {
>> +       .get_periph_rate        = exynos7420_peric1_get_periph_rate,
>> +};
>> +
>> +static int exynos7420_clk_peric1_probe(struct udevice *dev)
>> +{
>> +       return 0;
>
> Then you can omit this function.
>
>> +}
>> +
>> +static const struct udevice_id exynos7420_clk_peric1_compat[] = {
>> +       { .compatible = "samsung,exynos7-clock-peric1" },
>> +       { }
>> +};
>> +
>> +U_BOOT_DRIVER(exynos7420_clk_peric1) = {
>> +       .name = "exynos7420-clock-peric1",
>> +       .id = UCLASS_CLK,
>> +       .of_match = exynos7420_clk_peric1_compat,
>> +       .probe = exynos7420_clk_peric1_probe,
>> +       .ops = &exynos7420_clk_peric1_ops,
>> +       .flags = DM_FLAG_PRE_RELOC,
>> +};
>> diff --git a/drivers/clk/exynos/clk-pll.c b/drivers/clk/exynos/clk-pll.c
>> new file mode 100644
>> index 0000000..dd11268
>> --- /dev/null
>> +++ b/drivers/clk/exynos/clk-pll.c
>> @@ -0,0 +1,33 @@
>> +/*
>> + * Exynos PLL helper functions for clock drivers.
>> + * Copyright (C) 2016 Samsung Electronics
>> + * Thomas Abraham <thomas.ab at samsung.com>
>> + *
>> + * SPDX-License-Identifier:    GPL-2.0+
>> + */
>> +
>> +#include <common.h>
>> +#include <asm/io.h>
>> +#include <div64.h>
>> +
>> +#define PLL145X_MDIV_SHIFT     16
>> +#define PLL145X_MDIV_MASK      0x3ff
>> +#define PLL145X_PDIV_SHIFT     8
>> +#define PLL145X_PDIV_MASK      0x3f
>> +#define PLL145X_SDIV_SHIFT     0
>> +#define PLL145X_SDIV_MASK      0x7
>> +
>> +unsigned long pll145x_get_rate(unsigned int *con1, unsigned long fin_freq)
>> +{
>> +       unsigned long pll_con1 = readl(con1);
>> +       unsigned long mdiv, sdiv, pdiv;
>> +       uint64_t fvco = fin_freq;
>> +
>> +       mdiv = (pll_con1 >> PLL145X_MDIV_SHIFT) & PLL145X_MDIV_MASK;
>> +       pdiv = (pll_con1 >> PLL145X_PDIV_SHIFT) & PLL145X_PDIV_MASK;
>> +       sdiv = (pll_con1 >> PLL145X_SDIV_SHIFT) & PLL145X_SDIV_MASK;
>> +
>> +       fvco *= mdiv;
>> +       do_div(fvco, (pdiv << sdiv));
>> +       return (unsigned long)fvco;
>> +}
>> diff --git a/drivers/clk/exynos/clk-pll.h b/drivers/clk/exynos/clk-pll.h
>> new file mode 100644
>> index 0000000..631d035
>> --- /dev/null
>> +++ b/drivers/clk/exynos/clk-pll.h
>> @@ -0,0 +1,9 @@
>> +/*
>> + * Exynos PLL helper functions for clock drivers.
>> + * Copyright (C) 2016 Samsung Electronics
>> + * Thomas Abraham <thomas.ab at samsung.com>
>> + *
>> + * SPDX-License-Identifier:    GPL-2.0+
>> + */
>> +u-boot,dm-pre-reloc
>> +unsigned long pll145x_get_rate(unsigned int *con1, unsigned long fin_freq);
>> diff --git a/include/dt-bindings/clock/exynos7420-clk.h b/include/dt-bindings/clock/exynos7420-clk.h
>> new file mode 100644
>> index 0000000..10c5586
>> --- /dev/null
>> +++ b/include/dt-bindings/clock/exynos7420-clk.h
>> @@ -0,0 +1,207 @@
>> +/*
>> + * Copyright (c) 2014 Samsung Electronics Co., Ltd.
>> + * Author: Naveen Krishna Ch <naveenkrishna.ch at gmail.com>
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> +*/
>> +
>> +#ifndef _DT_BINDINGS_CLOCK_EXYNOS7_H
>> +#define _DT_BINDINGS_CLOCK_EXYNOS7_H
>> +
>> +/* TOPC */
>> +#define DOUT_ACLK_PERIS                        1
>> +#define DOUT_SCLK_BUS0_PLL             2
>> +#define DOUT_SCLK_BUS1_PLL             3
>> +#define DOUT_SCLK_CC_PLL               4
>> +#define DOUT_SCLK_MFC_PLL              5
>> +#define DOUT_ACLK_CCORE_133            6
>> +#define DOUT_ACLK_MSCL_532             7
>> +#define ACLK_MSCL_532                  8
>> +#define DOUT_SCLK_AUD_PLL              9
>> +#define FOUT_AUD_PLL                   10
>> +#define SCLK_AUD_PLL                   11
>> +#define SCLK_MFC_PLL_B                 12
>> +#define SCLK_MFC_PLL_A                 13
>> +#define SCLK_BUS1_PLL_B                        14
>> +#define SCLK_BUS1_PLL_A                        15
>> +#define SCLK_BUS0_PLL_B                        16
>> +#define SCLK_BUS0_PLL_A                        17
>> +#define SCLK_CC_PLL_B                  18
>> +#define SCLK_CC_PLL_A                  19
>> +#define ACLK_CCORE_133                 20
>> +#define ACLK_PERIS_66                  21
>> +#define TOPC_NR_CLK                    22
>> +
>> +/* TOP0 */
>> +#define DOUT_ACLK_PERIC1               1
>> +#define DOUT_ACLK_PERIC0               2
>> +#define CLK_SCLK_UART0                 3
>> +#define CLK_SCLK_UART1                 4
>> +#define CLK_SCLK_UART2                 5
>> +#define CLK_SCLK_UART3                 6
>> +#define CLK_SCLK_SPI0                  7
>> +#define CLK_SCLK_SPI1                  8
>> +#define CLK_SCLK_SPI2                  9
>> +#define CLK_SCLK_SPI3                  10
>> +#define CLK_SCLK_SPI4                  11
>> +#define CLK_SCLK_SPDIF                 12
>> +#define CLK_SCLK_PCM1                  13
>> +#define CLK_SCLK_I2S1                  14
>> +#define CLK_ACLK_PERIC0_66             15
>> +#define CLK_ACLK_PERIC1_66             16
>> +#define TOP0_NR_CLK                    17
>> +
>> +/* TOP1 */
>> +#define DOUT_ACLK_FSYS1_200            1
>> +#define DOUT_ACLK_FSYS0_200            2
>> +#define DOUT_SCLK_MMC2                 3
>> +#define DOUT_SCLK_MMC1                 4
>> +#define DOUT_SCLK_MMC0                 5
>> +#define CLK_SCLK_MMC2                  6
>> +#define CLK_SCLK_MMC1                  7
>> +#define CLK_SCLK_MMC0                  8
>> +#define CLK_ACLK_FSYS0_200             9
>> +#define CLK_ACLK_FSYS1_200             10
>> +#define CLK_SCLK_PHY_FSYS1             11
>> +#define CLK_SCLK_PHY_FSYS1_26M         12
>> +#define MOUT_SCLK_UFSUNIPRO20          13
>> +#define DOUT_SCLK_UFSUNIPRO20          14
>> +#define CLK_SCLK_UFSUNIPRO20           15
>> +#define DOUT_SCLK_PHY_FSYS1            16
>> +#define DOUT_SCLK_PHY_FSYS1_26M                17
>> +#define TOP1_NR_CLK                    18
>> +
>> +/* CCORE */
>> +#define PCLK_RTC                       1
>> +#define CCORE_NR_CLK                   2
>> +
>> +/* PERIC0 */
>> +#define PCLK_UART0                     1
>> +#define SCLK_UART0                     2
>> +#define PCLK_HSI2C0                    3
>> +#define PCLK_HSI2C1                    4
>> +#define PCLK_HSI2C4                    5
>> +#define PCLK_HSI2C5                    6
>> +#define PCLK_HSI2C9                    7
>> +#define PCLK_HSI2C10                   8
>> +#define PCLK_HSI2C11                   9
>> +#define PCLK_PWM                       10
>> +#define SCLK_PWM                       11
>> +#define PCLK_ADCIF                     12
>> +#define PERIC0_NR_CLK                  13
>> +
>> +/* PERIC1 */
>> +#define PCLK_UART1                     1
>> +#define PCLK_UART2                     2
>> +#define PCLK_UART3                     3
>> +#define SCLK_UART1                     4
>> +#define SCLK_UART2                     5
>> +#define SCLK_UART3                     6
>> +#define PCLK_HSI2C2                    7
>> +#define PCLK_HSI2C3                    8
>> +#define PCLK_HSI2C6                    9
>> +#define PCLK_HSI2C7                    10
>> +#define PCLK_HSI2C8                    11
>> +#define PCLK_SPI0                      12
>> +#define PCLK_SPI1                      13
>> +#define PCLK_SPI2                      14
>> +#define PCLK_SPI3                      15
>> +#define PCLK_SPI4                      16
>> +#define SCLK_SPI0                      17
>> +#define SCLK_SPI1                      18
>> +#define SCLK_SPI2                      19
>> +#define SCLK_SPI3                      20
>> +#define SCLK_SPI4                      21
>> +#define PCLK_I2S1                      22
>> +#define PCLK_PCM1                      23
>> +#define PCLK_SPDIF                     24
>> +#define SCLK_I2S1                      25
>> +#define SCLK_PCM1                      26
>> +#define SCLK_SPDIF                     27
>> +#define PERIC1_NR_CLK                  28
>> +
>> +/* PERIS */
>> +#define PCLK_CHIPID                    1
>> +#define SCLK_CHIPID                    2
>> +#define PCLK_WDT                       3
>> +#define PCLK_TMU                       4
>> +#define SCLK_TMU                       5
>> +#define PERIS_NR_CLK                   6
>> +
>> +/* FSYS0 */
>> +#define ACLK_MMC2                      1
>> +#define ACLK_AXIUS_USBDRD30X_FSYS0X    2
>> +#define ACLK_USBDRD300                 3
>> +#define SCLK_USBDRD300_SUSPENDCLK      4
>> +#define SCLK_USBDRD300_REFCLK          5
>> +#define PHYCLK_USBDRD300_UDRD30_PIPE_PCLK_USER         6
>> +#define PHYCLK_USBDRD300_UDRD30_PHYCLK_USER            7
>> +#define OSCCLK_PHY_CLKOUT_USB30_PHY            8
>> +#define ACLK_PDMA0                     9
>> +#define ACLK_PDMA1                     10
>> +#define FSYS0_NR_CLK                   11
>> +
>> +/* FSYS1 */
>> +#define ACLK_MMC1                      1
>> +#define ACLK_MMC0                      2
>> +#define PHYCLK_UFS20_TX0_SYMBOL                3
>> +#define PHYCLK_UFS20_RX0_SYMBOL                4
>> +#define PHYCLK_UFS20_RX1_SYMBOL                5
>> +#define ACLK_UFS20_LINK                        6
>> +#define SCLK_UFSUNIPRO20_USER          7
>> +#define PHYCLK_UFS20_RX1_SYMBOL_USER   8
>> +#define PHYCLK_UFS20_RX0_SYMBOL_USER   9
>> +#define PHYCLK_UFS20_TX0_SYMBOL_USER   10
>> +#define OSCCLK_PHY_CLKOUT_EMBEDDED_COMBO_PHY   11
>> +#define SCLK_COMBO_PHY_EMBEDDED_26M    12
>> +#define DOUT_PCLK_FSYS1                        13
>> +#define PCLK_GPIO_FSYS1                        14
>> +#define MOUT_FSYS1_PHYCLK_SEL1         15
>> +#define FSYS1_NR_CLK                   16
>> +
>> +/* MSCL */
>> +#define USERMUX_ACLK_MSCL_532          1
>> +#define DOUT_PCLK_MSCL                 2
>> +#define ACLK_MSCL_0                    3
>> +#define ACLK_MSCL_1                    4
>> +#define ACLK_JPEG                      5
>> +#define ACLK_G2D                       6
>> +#define ACLK_LH_ASYNC_SI_MSCL_0                7
>> +#define ACLK_LH_ASYNC_SI_MSCL_1                8
>> +#define ACLK_AXI2ACEL_BRIDGE           9
>> +#define ACLK_XIU_MSCLX_0               10
>> +#define ACLK_XIU_MSCLX_1               11
>> +#define ACLK_QE_MSCL_0                 12
>> +#define ACLK_QE_MSCL_1                 13
>> +#define ACLK_QE_JPEG                   14
>> +#define ACLK_QE_G2D                    15
>> +#define ACLK_PPMU_MSCL_0               16
>> +#define ACLK_PPMU_MSCL_1               17
>> +#define ACLK_MSCLNP_133                        18
>> +#define ACLK_AHB2APB_MSCL0P            19
>> +#define ACLK_AHB2APB_MSCL1P            20
>> +
>> +#define PCLK_MSCL_0                    21
>> +#define PCLK_MSCL_1                    22
>> +#define PCLK_JPEG                      23
>> +#define PCLK_G2D                       24
>> +#define PCLK_QE_MSCL_0                 25
>> +#define PCLK_QE_MSCL_1                 26
>> +#define PCLK_QE_JPEG                   27
>> +#define PCLK_QE_G2D                    28
>> +#define PCLK_PPMU_MSCL_0               29
>> +#define PCLK_PPMU_MSCL_1               30
>> +#define PCLK_AXI2ACEL_BRIDGE           31
>> +#define PCLK_PMU_MSCL                  32
>> +#define MSCL_NR_CLK                    33
>> +
>> +/* AUD */
>> +#define SCLK_I2S                       1
>> +#define SCLK_PCM                       2
>> +#define PCLK_I2S                       3
>> +#define PCLK_PCM                       4
>> +#define ACLK_ADMA                      5
>> +#define AUD_NR_CLK                     6
>> +#endif /* _DT_BINDINGS_CLOCK_EXYNOS7_H */
>> --
>> 1.6.6.rc2
>>
>
> Regards,
> Simon


More information about the U-Boot mailing list