Please add Jagan (on Cc) to Cc for SPI driver related changes.

Please find some comments below...

On 07.03.2018 22:52, Marek BehĂșn wrote:
> Since now we have driver for clocks on Armada 37xx, use it to determine
> SQF clock frequency for the SPI driver.
> 
> Also change the default config files for Armada 37xx devices so that
> the clock driver is enabled by default, otherwise the SPI driver cannot
> be enabled.
> 
> Signed-off-by: Marek Behun <marek.be...@nic.cz>
> ---
>   arch/arm/dts/armada-37xx.dtsi               |  4 +--
>   configs/mvebu_db-88f3720_defconfig          |  3 ++
>   configs/mvebu_espressobin-88f3720_defconfig |  3 ++
>   drivers/spi/Kconfig                         |  1 +
>   drivers/spi/mvebu_a3700_spi.c               | 52 
> ++++++++++++++++-------------
>   5 files changed, 37 insertions(+), 26 deletions(-)
> 
> diff --git a/arch/arm/dts/armada-37xx.dtsi b/arch/arm/dts/armada-37xx.dtsi
> index e848812fca..c254c0aded 100644
> --- a/arch/arm/dts/armada-37xx.dtsi
> +++ b/arch/arm/dts/armada-37xx.dtsi
> @@ -281,8 +281,8 @@
>                               #address-cells = <1>;
>                               #size-cells = <0>;
>                               #clock-cells = <0>;
> -                             clock-frequency = <160000>;
> -                             spi-max-frequency = <40000>;
> +                             spi-max-frequency = <50000000>;
> +                             clocks = <&nb_periph_clk 7>;
>                               status = "disabled";
>                       };
>   
> diff --git a/configs/mvebu_db-88f3720_defconfig 
> b/configs/mvebu_db-88f3720_defconfig
> index 338d764d84..c8ca06e428 100644
> --- a/configs/mvebu_db-88f3720_defconfig
> +++ b/configs/mvebu_db-88f3720_defconfig
> @@ -33,6 +33,9 @@ CONFIG_DM_GPIO=y
>   # CONFIG_MVEBU_GPIO is not set
>   CONFIG_DM_I2C=y
>   CONFIG_MISC=y
> +CONFIG_CLK=y
> +CONFIG_CLK_MVEBU=y
> +CONFIG_CLK_ARMADA_3720=y
>   CONFIG_DM_MMC=y
>   CONFIG_MMC_SDHCI=y
>   CONFIG_MMC_SDHCI_SDMA=y
> diff --git a/configs/mvebu_espressobin-88f3720_defconfig 
> b/configs/mvebu_espressobin-88f3720_defconfig
> index 28005e6131..5f449d34ea 100644
> --- a/configs/mvebu_espressobin-88f3720_defconfig
> +++ b/configs/mvebu_espressobin-88f3720_defconfig
> @@ -30,6 +30,9 @@ CONFIG_SCSI_AHCI=y
>   CONFIG_BLOCK_CACHE=y
>   CONFIG_DM_I2C=y
>   CONFIG_MISC=y
> +CONFIG_CLK=y
> +CONFIG_CLK_MVEBU=y
> +CONFIG_CLK_ARMADA_3720=y
>   CONFIG_DM_MMC=y
>   CONFIG_MMC_SDHCI=y
>   CONFIG_MMC_SDHCI_SDMA=y
> diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
> index 235a8c7d73..4ea94a5f35 100644
> --- a/drivers/spi/Kconfig
> +++ b/drivers/spi/Kconfig
> @@ -94,6 +94,7 @@ config ICH_SPI
>   
>   config MVEBU_A3700_SPI
>       bool "Marvell Armada 3700 SPI driver"
> +     depends on CLK_ARMADA_3720

Wouldn't it be easier to "select" CLK_ARMADA_3720 here instead? No
changes to the config files necessary this way.

>       help
>         Enable the Marvell Armada 3700 SPI driver. This driver can be
>         used to access the SPI NOR flash on platforms embedding this
> diff --git a/drivers/spi/mvebu_a3700_spi.c b/drivers/spi/mvebu_a3700_spi.c
> index d1708a8d56..19e854945b 100644
> --- a/drivers/spi/mvebu_a3700_spi.c
> +++ b/drivers/spi/mvebu_a3700_spi.c
> @@ -10,6 +10,7 @@
>   #include <dm.h>
>   #include <malloc.h>
>   #include <spi.h>
> +#include <clk.h>
>   #include <wait_bit.h>
>   #include <asm/io.h>
>   
> @@ -22,9 +23,8 @@ DECLARE_GLOBAL_DATA_PTR;
>   #define MVEBU_SPI_A3700_CLK_POL                     BIT(7)
>   #define MVEBU_SPI_A3700_FIFO_EN                     BIT(17)
>   #define MVEBU_SPI_A3700_SPI_EN_0            BIT(16)
> -#define MVEBU_SPI_A3700_CLK_PRESCALE_BIT     0
> -#define MVEBU_SPI_A3700_CLK_PRESCALE_MASK    \
> -     (0x1f << MVEBU_SPI_A3700_CLK_PRESCALE_BIT)
> +#define MVEBU_SPI_A3700_CLK_PRESCALE_MASK    0x1f
> +
>   
>   /* SPI registers */
>   struct spi_reg {
> @@ -36,8 +36,7 @@ struct spi_reg {
>   
>   struct mvebu_spi_platdata {
>       struct spi_reg *spireg;
> -     unsigned int frequency;
> -     unsigned int clock;
> +     struct clk clk;
>   };
>   
>   static void spi_cs_activate(struct spi_reg *reg, int cs)
> @@ -178,17 +177,18 @@ static int mvebu_spi_set_speed(struct udevice *bus, 
> uint hz)
>   {
>       struct mvebu_spi_platdata *plat = dev_get_platdata(bus);
>       struct spi_reg *reg = plat->spireg;
> -     u32 data;
> +     u32 data, prescale;
>   
>       data = readl(&reg->cfg);
>   
> -     /* Set Prescaler */
> -     data &= ~MVEBU_SPI_A3700_CLK_PRESCALE_MASK;
> +     prescale = DIV_ROUND_UP(clk_get_rate(&plat->clk), hz);
> +     if (prescale > 31)
> +             prescale = 0x1f;
> +     else if (prescale > 15)
> +             prescale = 0x10 + (prescale + 1)/2;

checkpatch will most likely complain about missing space in the line
above.

>   
> -     /* Calculate Prescaler = (spi_input_freq / spi_max_freq) */
> -     if (hz > plat->frequency)
> -             hz = plat->frequency;
> -     data |= plat->clock / hz;
> +     data &= ~MVEBU_SPI_A3700_CLK_PRESCALE_MASK;
> +     data |= prescale & MVEBU_SPI_A3700_CLK_PRESCALE_MASK;

Perhaps its better to check on "prescale > MVEBU_SPI_A3700_CLK_PRESCALE_MASK"
instead of silently removing the potential additional bits.

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

Reply via email to