Hi Eugeniy,

Please populate commit message with brief explanation of what
kind of functionality is added by that change and why it is
needed in the first place.

On Fri, 2018-03-23 at 15:35 +0300, Eugeniy Paltsev wrote:
> Signed-off-by: Eugeniy Paltsev <eugeniy.palt...@synopsys.com>
> ---
>  arch/arc/dts/hsdk.dts           |   56 +++
>  board/synopsys/hsdk/MAINTAINERS |    4 +-
>  board/synopsys/hsdk/Makefile    |    2 +
>  board/synopsys/hsdk/clk-lib.c   |   75 +++
>  board/synopsys/hsdk/clk-lib.h   |   38 ++
>  board/synopsys/hsdk/env-lib.c   |  302 ++++++++++++
>  board/synopsys/hsdk/env-lib.h   |   58 +++
>  board/synopsys/hsdk/hsdk.c      | 1034 
> +++++++++++++++++++++++++++++++++++++--
>  configs/hsdk_defconfig          |   14 +
>  include/configs/hsdk.h          |   56 ++-
>  10 files changed, 1588 insertions(+), 51 deletions(-)
>  create mode 100644 board/synopsys/hsdk/clk-lib.c
>  create mode 100644 board/synopsys/hsdk/clk-lib.h
>  create mode 100644 board/synopsys/hsdk/env-lib.c
>  create mode 100644 board/synopsys/hsdk/env-lib.h
> 
> diff --git a/arch/arc/dts/hsdk.dts b/arch/arc/dts/hsdk.dts
> index 67dfb93ca8..4bb3035d53 100644
> --- a/arch/arc/dts/hsdk.dts
> +++ b/arch/arc/dts/hsdk.dts
> @@ -6,6 +6,7 @@
>  /dts-v1/;
>  
>  #include "skeleton.dtsi"
> +#include "dt-bindings/clock/snps,hsdk-cgu.h"
>  
>  / {
>       #address-cells = <1>;
> @@ -13,6 +14,7 @@
>  
>       aliases {
>               console = &uart0;
> +             spi0 = &spi0;
>       };

That (together with corresponding defconfig changes) should be put in
a separate commit that adds support of SPI Flash on this board.

Also pls either make sure series this change is depending on get
applied to main git tree of U-Boot or mention them as a prerequisites.

>       cpu_card {
> @@ -24,6 +26,35 @@
>               };
>       };
>  
> +     clk-fmeas {
> +             clocks = <&cgu_clk CLK_ARC_PLL>, <&cgu_clk CLK_SYS_PLL>,
> +                      <&cgu_clk CLK_TUN_PLL>, <&cgu_clk CLK_DDR_PLL>,
> +                      <&cgu_clk CLK_ARC>, <&cgu_clk CLK_HDMI_PLL>,
> +                      <&cgu_clk CLK_TUN_TUN>, <&cgu_clk CLK_HDMI>,
> +                      <&cgu_clk CLK_SYS_APB>, <&cgu_clk CLK_SYS_AXI>,
> +                      <&cgu_clk CLK_SYS_ETH>, <&cgu_clk CLK_SYS_USB>,
> +                      <&cgu_clk CLK_SYS_SDIO>, <&cgu_clk CLK_SYS_HDMI>,
> +                      <&cgu_clk CLK_SYS_GFX_CORE>, <&cgu_clk 
> CLK_SYS_GFX_DMA>,
> +                      <&cgu_clk CLK_SYS_GFX_CFG>, <&cgu_clk 
> CLK_SYS_DMAC_CORE>,
> +                      <&cgu_clk CLK_SYS_DMAC_CFG>, <&cgu_clk 
> CLK_SYS_SDIO_REF>,
> +                      <&cgu_clk CLK_SYS_SPI_REF>, <&cgu_clk CLK_SYS_I2C_REF>,
> +                      <&cgu_clk CLK_SYS_UART_REF>, <&cgu_clk 
> CLK_SYS_EBI_REF>,
> +                      <&cgu_clk CLK_TUN_ROM>, <&cgu_clk CLK_TUN_PWM>;
> +             clock-names = "cpu-pll", "sys-pll",
> +                           "tun-pll", "ddr-clk",
> +                           "cpu-clk", "hdmi-pll",
> +                           "tun-clk", "hdmi-clk",
> +                           "apb-clk", "axi-clk",
> +                           "eth-clk", "usb-clk",
> +                           "sdio-clk", "hdmi-sys-clk",
> +                           "gfx-core-clk", "gfx-dma-clk",
> +                           "gfx-cfg-clk", "dmac-core-clk",
> +                           "dmac-cfg-clk", "sdio-ref-clk",
> +                           "spi-clk", "i2c-clk",
> +                           "uart-clk", "ebi-clk",
> +                           "rom-clk", "pwm-clk";
> +     };
> +
>       cgu_clk: cgu-clk@f0000000 {
>               compatible = "snps,hsdk-cgu-clock";
>               reg = <0xf0000000 0x10>, <0xf00014B8 0x4>;
> @@ -53,4 +84,29 @@
>               compatible = "generic-ohci";
>               reg = <0xf0060000 0x100>;
>       };
> +
> +     spi0: spi@f0020000 {
> +             compatible = "snps,dw-apb-ssi";
> +             reg = <0xf0020000 0x1000>;
> +             #address-cells = <1>;
> +             #size-cells = <0>;
> +             spi-max-frequency = <4000000>;
> +             clocks = <&cgu_clk CLK_SYS_SPI_REF>;
> +             clock-names = "spi_clk";
> +             cs-gpio = <&cs_gpio 0>;
> +             spi_flash@0 {
> +                     compatible = "spi-flash";
> +                     reg = <0>;
> +                     spi-max-frequency = <4000000>;
> +             };
> +     };
> +
> +     cs_gpio: gpio@f00114B0 {
> +             compatible = "snps,hsdk-creg-gpio";
> +             reg = <0xf00014B0 0x4>;
> +             gpio-controller;
> +             #gpio-cells = <1>;
> +             gpio-bank-name = "hsdk-spi-cs";
> +             gpio-count = <1>;

Ditto.
 
> -#define      CREG_BASE       (ARC_PERIPHERAL_BASE + 0x1000)
> -#define      CREG_PAE        (CREG_BASE + 0x180)
> -#define      CREG_PAE_UPDATE (CREG_BASE + 0x194)
> -#define      CREG_CPU_START  (CREG_BASE + 0x400)
> +#define ALL_CPU_MASK         GENMASK(NR_CPUS - 1, 0)
> +#define MASTER_CPU_ID                0
> +#define APERTURE_SHIFT               28
> +#define NO_CCM                       0x10
> +#define SLAVE_CPU_READY              0x12345678
> +#define BOOTSTAGE_1          1
> +#define BOOTSTAGE_2          2
> +#define BOOTSTAGE_3          3
> +#define BOOTSTAGE_4          4
> +#define BOOTSTAGE_5          5

Seems like you don't like an idea of giving meaningful names to these stages.

>  
> -int board_early_init_f(void)
> +#define RESET_VECTOR_ADDR    0x0
> +
> +#define CREG_BASE            (ARC_PERIPHERAL_BASE + 0x1000)
> +#define CREG_CPU_START               (CREG_BASE + 0x400)
> +#define CREG_CPU_START_MASK  0xF
> +
> +#define SDIO_BASE            (ARC_PERIPHERAL_BASE + 0xA000)
> +#define SDIO_UHS_REG_EXT     (SDIO_BASE + 0x108)
> +#define SDIO_UHS_REG_EXT_DIV_2       (2 << 30)
> +
> +/* Uncached access macros */
> +#define arc_read_uncached_32(ptr)    \
> +({                                   \
> +     unsigned int __ret;             \
> +     __asm__ __volatile__(           \
> +     "       ld.di %0, [%1]  \n"     \
> +     : "=r"(__ret)                   \
> +     : "r"(ptr));                    \
> +     __ret;                          \
> +})
> +
> +#define arc_write_uncached_32(ptr, data)\
> +({                                   \
> +     __asm__ __volatile__(           \
> +     "       st.di %0, [%1]  \n"     \
> +     :                               \
> +     : "r"(data), "r"(ptr));         \
> +})
> +
> +struct hsdk_env_core_ctl {
> +     u32_env entry[NR_CPUS];
> +     u32_env iccm[NR_CPUS];
> +     u32_env dccm[NR_CPUS];
> +};
> +
> +struct hsdk_env_common_ctl {
> +     bool halt_on_boot;
> +     u32_env core_mask;
> +     u32_env cpu_freq;
> +     u32_env axi_freq;
> +     u32_env tun_freq;
> +     u32_env nvlim;
> +     u32_env icache;
> +     u32_env dcache;
> +};
> +
> +/*
> + * Uncached cross-cpu structure, all CPUs must access to this structure 
> fields
> + * only with arc_read_uncached_32() / arc_write_uncached_32() accessors.

... because ...

> + */
> +struct hsdk_cross_cpu {
> +     /* slave CPU ready flag */
> +     u32 ready_flag;
> +     /* address of the area, which can be used for stack by slave CPU */
> +     u32 stack_ptr;
> +     /* slave CPU status - bootstage number */
> +     s32 status[NR_CPUS];
> +
> +     /*
> +      * Slave CPU data - it is copy of corresponding fields in
> +      * hsdk_env_core_ctl and hsdk_env_common_ctl structures which are
> +      * required for slave CPUs initialization.
> +      * This fields can be populated by copying from hsdk_env_core_ctl
> +      * and hsdk_env_common_ctl structures with sync_cross_cpu_data()
> +      * function.
> +      */
> +     u32 entry[NR_CPUS];
> +     u32 iccm[NR_CPUS];
> +     u32 dccm[NR_CPUS];
> +
> +     u32 core_mask;
> +     u32 icache;
> +     u32 dcache;
> +
> +     u8 cache_padding[ARCH_DMA_MINALIGN];
> +} __aligned(ARCH_DMA_MINALIGN);
> +
> +/* Place for slave CPUs temporary stack */
> +static u32 slave_stack[256 * NR_CPUS] __aligned(4);

__aligned(4) makes no sense for an array of ints on 32 bit arch.

> +
> +/* TODO: add ICCM BCR and DCCM BCR runtime check */
> +static void init_slave_cpu_func(u32 core)
> +{
> +     u32 val;
> +
> +     /* ICCM move if exists */

IMHO it's better to say "Remap xCCM to another memory region".

[snip]

> +static void do_init_master_cpu(void)
> +{
> +     /*
> +      * Setup master caches even if master isn't used as we want to use
> +      * same cache configuration on all running CPUs
> +      */
> +     init_master_icache();
> +     init_master_dcache();
> +}
> +
> +enum hsdk_axi_masters {
> +     M_HS_CORE = 0,
> +     M_HS_RTT,
> +     M_AXI_TUN,
> +     M_HDMI_VIDEO,
> +     M_HDMI_AUDIO,
> +     M_USB_HOST,
> +     M_ETHERNET,
> +     M_SDIO,
> +     M_GPU,
> +     M_DMAC_0,
> +     M_DMAC_1,
> +     M_DVFS
> +};
> +
> +#define UPDATE_VAL   1
> +
> +/*
> + * m master          AXI_M_m_SLV0    AXI_M_m_SLV1    AXI_M_m_OFFSET0 
> AXI_M_m_OFFSET1
> + * 0 HS (CBU)        0x11111111      0x63111111      0xFEDCBA98      
> 0x0E543210
> + * 1 HS (RTT)        0x77777777      0x77777777      0xFEDCBA98      
> 0x76543210
> + * 2 AXI Tunnel      0x88888888      0x88888888      0xFEDCBA98      
> 0x76543210
> + * 3 HDMI-VIDEO      0x77777777      0x77777777      0xFEDCBA98      
> 0x76543210
> + * 4 HDMI-ADUIO      0x77777777      0x77777777      0xFEDCBA98      
> 0x76543210
> + * 5 USB-HOST        0x77777777      0x77999999      0xFEDCBA98      
> 0x76DCBA98
> + * 6 ETHERNET        0x77777777      0x77999999      0xFEDCBA98      
> 0x76DCBA98
> + * 7 SDIO            0x77777777      0x77999999      0xFEDCBA98      
> 0x76DCBA98
> + * 8 GPU             0x77777777      0x77777777      0xFEDCBA98      
> 0x76543210
> + * 9 DMAC (port #1)  0x77777777      0x77777777      0xFEDCBA98      
> 0x76543210
> + * 10        DMAC (port #2)  0x77777777      0x77777777      0xFEDCBA98      
> 0x76543210
> + * 11        DVFS            0x00000000      0x60000000      0x00000000      
> 0x00000000
> + *
> + * Please read ARC HS Development IC Specification, section 17.2 for more
> + * information about apertures configuration.
> + * NOTE: we are changing default apertures configuration, specified in

"We intentionally modify default settings in U-boot".

> + * "Table 111 CREG Address Decoder register reset values".
> + */
> +

[snip]

> +static int do_hsdk_clock_print_all(cmd_tbl_t *cmdtp, int flag, int argc,
> +                                char *const argv[])
> +{
> +     /* CPU clock domain */
> +     soc_clk_ctl("cpu-pll", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("cpu-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     printf("\n");
> +
> +     /* SYS clock domain */
> +     soc_clk_ctl("sys-pll", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("apb-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("axi-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("eth-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("usb-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("sdio-clk", NULL, CLK_PRINT | CLK_MHZ);
> +/*   soc_clk_ctl("hdmi-sys-clk", NULL, CLK_PRINT | CLK_MHZ); */
> +     soc_clk_ctl("gfx-core-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("gfx-dma-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("gfx-cfg-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("dmac-core-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("dmac-cfg-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("sdio-ref-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("spi-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     soc_clk_ctl("i2c-clk", NULL, CLK_PRINT | CLK_MHZ);
> +/*   soc_clk_ctl("ebi-clk", NULL, CLK_PRINT | CLK_MHZ); */
> +     soc_clk_ctl("uart-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     printf("\n");
> +
> +     /* DDR clock domain */
> +     soc_clk_ctl("ddr-clk", NULL, CLK_PRINT | CLK_MHZ);
> +     printf("\n");
> +
> +     /* HDMI clock domain */
> +/*   soc_clk_ctl("hdmi-pll", NULL, CLK_PRINT | CLK_MHZ); */
> +/*   soc_clk_ctl("hdmi-clk", NULL, CLK_PRINT | CLK_MHZ); */
> +/*   printf("\n"); */
> +

Please explain why do we want to keep these commented out lines.

>  }
> diff --git a/configs/hsdk_defconfig b/configs/hsdk_defconfig
> index 11cb7e03a6..7656ec9a31 100644
> --- a/configs/hsdk_defconfig
> +++ b/configs/hsdk_defconfig
> @@ -7,13 +7,19 @@ CONFIG_DEFAULT_DEVICE_TREE="hsdk"
>  CONFIG_USE_BOOTARGS=y
>  CONFIG_BOOTARGS="console=ttyS0,115200n8"
>  CONFIG_BOARD_EARLY_INIT_F=y
> +CONFIG_HUSH_PARSER=y
>  CONFIG_SYS_PROMPT="hsdk# "
> +CONFIG_CMD_ENV_FLAGS=y
>  # CONFIG_CMD_FLASH is not set
> +CONFIG_CMD_GPIO=y
>  CONFIG_CMD_MMC=y
> +CONFIG_CMD_SF=y
> +CONFIG_CMD_SPI=y

Move to a separate patch.

>  CONFIG_CMD_USB=y
>  # CONFIG_CMD_SETEXPR is not set
>  CONFIG_CMD_DHCP=y
>  CONFIG_CMD_PING=y
> +CONFIG_CMD_CACHE=y
>  CONFIG_CMD_EXT2=y
>  CONFIG_CMD_EXT4=y
>  CONFIG_CMD_EXT4_WRITE=y
> @@ -25,12 +31,20 @@ CONFIG_ENV_FAT_INTERFACE="mmc"
>  CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
>  CONFIG_NET_RANDOM_ETHADDR=y
>  CONFIG_DM=y
> +CONFIG_CLK_HSDK=y
> +CONFIG_DM_GPIO=y
> +CONFIG_HSDK_CREG_GPIO=y

Last 2 lines go to a separate patch.

>  CONFIG_MMC=y
>  CONFIG_MMC_DW=y
> +CONFIG_DM_SPI_FLASH=y
> +CONFIG_SPI_FLASH=y
> +CONFIG_SPI_FLASH_SST=y

Ditto

>  CONFIG_DM_ETH=y
>  CONFIG_ETH_DESIGNWARE=y
>  CONFIG_DM_SERIAL=y
>  CONFIG_SYS_NS16550=y
> +CONFIG_DM_SPI=y
> +CONFIG_DESIGNWARE_SPI=y

Ditto.

-Alexey
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to