[U-Boot] [PATCH 3/3] clk: clk_stm32f: Move SYSCFG clock setup into configure_clocks()

Patrice CHOTARD patrice.chotard at st.com
Thu Jan 18 07:47:12 UTC 2018


Hi Vikas

On 01/17/2018 08:55 PM, Vikas Manocha wrote:
> Hi Patrice,
> 
> On 01/17/2018 12:46 AM, patrice.chotard at st.com wrote:
>> From: Patrice Chotard <patrice.chotard at st.com>
>>
>> Move SYSCFG clock setup into configure_clocks() instead of calling
>> clock_setup() from drivers.
> 
> It is in board configuration.

Yes, my comment is badly formulated.

The idea is to remove clock_setup() from clock driver.

> 
>> Move the RMII setup from board_early_init_f() to board_init()
>> to insure that RMII bit is set only when clock driver is initialized.
>>
>> Signed-off-by: Patrice Chotard <patrice.chotard at st.com>
>> ---
>>   arch/arm/include/asm/arch-stm32f7/stm32_periph.h |  1 -
>>   board/st/stm32f746-disco/stm32f746-disco.c       | 19 ++++++-------------
>>   drivers/clk/clk_stm32f.c                         | 10 ++++------
>>   3 files changed, 10 insertions(+), 20 deletions(-)
>>
>> diff --git a/arch/arm/include/asm/arch-stm32f7/stm32_periph.h b/arch/arm/include/asm/arch-stm32f7/stm32_periph.h
>> index 13f9c9b..7b8f66a 100644
>> --- a/arch/arm/include/asm/arch-stm32f7/stm32_periph.h
>> +++ b/arch/arm/include/asm/arch-stm32f7/stm32_periph.h
>> @@ -21,7 +21,6 @@ enum periph_id {
>>   };
>>   
>>   enum periph_clock {
>> -	SYSCFG_CLOCK_CFG,
>>   	TIMER2_CLOCK_CFG,
>>   };
>>   
>> diff --git a/board/st/stm32f746-disco/stm32f746-disco.c b/board/st/stm32f746-disco/stm32f746-disco.c
>> index 58a5ef0..8da7028 100644
>> --- a/board/st/stm32f746-disco/stm32f746-disco.c
>> +++ b/board/st/stm32f746-disco/stm32f746-disco.c
>> @@ -69,23 +69,10 @@ int dram_init_banksize(void)
>>   	return 0;
>>   }
>>   
>> -#ifdef CONFIG_ETH_DESIGNWARE
>> -static int stmmac_setup(void)
>> -{
>> -	clock_setup(SYSCFG_CLOCK_CFG);
>> -	/* Set >RMII mode */
>> -	STM32_SYSCFG->pmc |= SYSCFG_PMC_MII_RMII_SEL;
>> -
>> -	return 0;
>> -}
>> -
>>   int board_early_init_f(void)
>>   {
>> -	stmmac_setup();
>> -
>>   	return 0;
>>   }
>> -#endif
>>   
>>   #ifdef CONFIG_SPL_BUILD
>>   #ifdef CONFIG_SPL_OS_BOOT
>> @@ -162,5 +149,11 @@ int board_late_init(void)
>>   int board_init(void)
>>   {
>>   	gd->bd->bi_boot_params = gd->bd->bi_dram[0].start + 0x100;
>> +
>> +#ifdef CONFIG_ETH_DESIGNWARE
>> +	/* Set >RMII mode */
>> +	STM32_SYSCFG->pmc |= SYSCFG_PMC_MII_RMII_SEL;
>> +#endif
>> +
>>   	return 0;
>>   }
>> diff --git a/drivers/clk/clk_stm32f.c b/drivers/clk/clk_stm32f.c
>> index d0c7a90..1ae5b70 100644
>> --- a/drivers/clk/clk_stm32f.c
>> +++ b/drivers/clk/clk_stm32f.c
>> @@ -67,8 +67,6 @@
>>   #define RCC_DCKCFGRX_SDMMC1SEL		BIT(28)
>>   #define RCC_DCKCFGR2_SDMMC2SEL		BIT(29)
>>   
>> -#define RCC_APB2ENR_SAI1EN		BIT(22)
>> -
>>   /*
>>    * RCC AHB1ENR specific definitions
>>    */
>> @@ -86,9 +84,9 @@
>>    * RCC APB2ENR specific definitions
>>    */
>>   #define RCC_APB2ENR_SYSCFGEN		BIT(14)
>> +#define RCC_APB2ENR_SAI1EN		BIT(22)
>>   
>>   enum periph_clock {
>> -	SYSCFG_CLOCK_CFG,
>>   	TIMER2_CLOCK_CFG,
>>   };
>>   
>> @@ -227,6 +225,9 @@ static int configure_clocks(struct udevice *dev)
>>   	/* gate the SAI clock, needed for MMC 1&2 clocks */
>>   	setbits_le32(&regs->apb2enr, RCC_APB2ENR_SAI1EN);
>>   
>> +	/* gate the SYSCFG clock, needed to set RMII ethernet interface */
> 
> RMII interface only required for f746 disco board.
> 
>> +	setbits_le32(&regs->apb2enr, RCC_APB2ENR_SYSCFGEN);
> 
> RMII & Syscfg is board specific requirement, here it will configure it for all stm32f devices.

You are right, i will update this. As it is currently only needed for 
ethernet, i will add the CONFIG_ETH_DESIGNWARE flag around.

For information, i will add new stm32f429-evaluation board (already 
supported in kernel) which provide ethernet connection.

Thanks for reviewing

Patrice

> 
> Cheers,
> Vikas
> 
>> +
>>   	return 0;
>>   }
>>   
>> @@ -352,9 +353,6 @@ static int stm32_clk_enable(struct clk *clk)
>>   void clock_setup(int peripheral)
>>   {
>>   	switch (peripheral) {
>> -	case SYSCFG_CLOCK_CFG:
>> -		setbits_le32(&STM32_RCC->apb2enr, RCC_APB2ENR_SYSCFGEN);
>> -		break;
>>   	case TIMER2_CLOCK_CFG:
>>   		setbits_le32(&STM32_RCC->apb1enr, RCC_APB1ENR_TIM2EN);
>>   		break;
>>


More information about the U-Boot mailing list