* [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2
@ 2020-03-26 15:58 Marek Vasut
2020-03-27 8:55 ` Patrice CHOTARD
2020-04-01 13:30 ` Patrick DELAUNAY
0 siblings, 2 replies; 11+ messages in thread
From: Marek Vasut @ 2020-03-26 15:58 UTC (permalink / raw)
To: u-boot
Add DT entries, Kconfig entries and board-specific entries to configure
FMC2 bus and make KS8851-16MLL on that bus accessible to U-Boot.
Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Patrick Delaunay <patrick.delaunay@st.com>
Cc: Patrice Chotard <patrice.chotard@st.com>
---
V2: Configure FMC2 nCS4 for SRAM as well
V3: Adjust the register macros
---
arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi | 68 ++++++++++++++++++++++
board/dhelectronics/dh_stm32mp1/board.c | 28 +++++++++
configs/stm32mp15_dhcom_basic_defconfig | 1 +
3 files changed, 97 insertions(+)
diff --git a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi
index 6c952a57ee..eba3588540 100644
--- a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi
+++ b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi
@@ -37,6 +37,12 @@
default-state = "on";
};
};
+
+ /* This is actually on FMC2, but we do not have bus driver for that */
+ ksz8851: ks8851mll at 64000000 {
+ compatible = "micrel,ks8851-mll";
+ reg = <0x64000000 0x20000>;
+ };
};
&i2c4 {
@@ -50,6 +56,68 @@
};
};
+&pinctrl {
+ /* These should bound to FMC2 bus driver, but we do not have one */
+ pinctrl-0 = <&fmc_pins_b>;
+ pinctrl-1 = <&fmc_sleep_pins_b>;
+ pinctrl-names = "default", "sleep";
+
+ fmc_pins_b: fmc-0 {
+ pins1 {
+ pinmux = <STM32_PINMUX('D', 4, AF12)>, /* FMC_NOE */
+ <STM32_PINMUX('D', 5, AF12)>, /* FMC_NWE */
+ <STM32_PINMUX('B', 7, AF12)>, /* FMC_NL */
+ <STM32_PINMUX('D', 14, AF12)>, /* FMC_D0 */
+ <STM32_PINMUX('D', 15, AF12)>, /* FMC_D1 */
+ <STM32_PINMUX('D', 0, AF12)>, /* FMC_D2 */
+ <STM32_PINMUX('D', 1, AF12)>, /* FMC_D3 */
+ <STM32_PINMUX('E', 7, AF12)>, /* FMC_D4 */
+ <STM32_PINMUX('E', 8, AF12)>, /* FMC_D5 */
+ <STM32_PINMUX('E', 9, AF12)>, /* FMC_D6 */
+ <STM32_PINMUX('E', 10, AF12)>, /* FMC_D7 */
+ <STM32_PINMUX('E', 11, AF12)>, /* FMC_D8 */
+ <STM32_PINMUX('E', 12, AF12)>, /* FMC_D9 */
+ <STM32_PINMUX('E', 13, AF12)>, /* FMC_D10 */
+ <STM32_PINMUX('E', 14, AF12)>, /* FMC_D11 */
+ <STM32_PINMUX('E', 15, AF12)>, /* FMC_D12 */
+ <STM32_PINMUX('D', 8, AF12)>, /* FMC_D13 */
+ <STM32_PINMUX('D', 9, AF12)>, /* FMC_D14 */
+ <STM32_PINMUX('D', 10, AF12)>, /* FMC_D15 */
+ <STM32_PINMUX('G', 9, AF12)>, /* FMC_NE2_FMC_NCE */
+ <STM32_PINMUX('G', 12, AF12)>; /* FMC_NE4 */
+ bias-disable;
+ drive-push-pull;
+ slew-rate = <3>;
+ };
+ };
+
+ fmc_sleep_pins_b: fmc-sleep-0 {
+ pins {
+ pinmux = <STM32_PINMUX('D', 4, ANALOG)>, /* FMC_NOE */
+ <STM32_PINMUX('D', 5, ANALOG)>, /* FMC_NWE */
+ <STM32_PINMUX('B', 7, ANALOG)>, /* FMC_NL */
+ <STM32_PINMUX('D', 14, ANALOG)>, /* FMC_D0 */
+ <STM32_PINMUX('D', 15, ANALOG)>, /* FMC_D1 */
+ <STM32_PINMUX('D', 0, ANALOG)>, /* FMC_D2 */
+ <STM32_PINMUX('D', 1, ANALOG)>, /* FMC_D3 */
+ <STM32_PINMUX('E', 7, ANALOG)>, /* FMC_D4 */
+ <STM32_PINMUX('E', 8, ANALOG)>, /* FMC_D5 */
+ <STM32_PINMUX('E', 9, ANALOG)>, /* FMC_D6 */
+ <STM32_PINMUX('E', 10, ANALOG)>, /* FMC_D7 */
+ <STM32_PINMUX('E', 11, ANALOG)>, /* FMC_D8 */
+ <STM32_PINMUX('E', 12, ANALOG)>, /* FMC_D9 */
+ <STM32_PINMUX('E', 13, ANALOG)>, /* FMC_D10 */
+ <STM32_PINMUX('E', 14, ANALOG)>, /* FMC_D11 */
+ <STM32_PINMUX('E', 15, ANALOG)>, /* FMC_D12 */
+ <STM32_PINMUX('D', 8, ANALOG)>, /* FMC_D13 */
+ <STM32_PINMUX('D', 9, ANALOG)>, /* FMC_D14 */
+ <STM32_PINMUX('D', 10, ANALOG)>, /* FMC_D15 */
+ <STM32_PINMUX('G', 9, ANALOG)>, /* FMC_NE2_FMC_NCE */
+ <STM32_PINMUX('G', 12, ANALOG)>; /* FMC_NE4 */
+ };
+ };
+};
+
&pmic {
u-boot,dm-pre-reloc;
};
diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c
index b663696983..be55242799 100644
--- a/board/dhelectronics/dh_stm32mp1/board.c
+++ b/board/dhelectronics/dh_stm32mp1/board.c
@@ -376,6 +376,32 @@ static void sysconf_init(void)
#endif
}
+static void board_init_fmc2(void)
+{
+#define STM32_FMC2_BCR1 0x0
+#define STM32_FMC2_BTR1 0x4
+#define STM32_FMC2_BWTR1 0x104
+#define STM32_FMC2_BCR(x) ((x) * 0x8 + STM32_FMC2_BCR1)
+#define STM32_FMC2_BTR(x) ((x) * 0x8 + STM32_FMC2_BTR1)
+#define STM32_FMC2_BWTR(x) ((x) * 0x8 + STM32_FMC2_BWTR1)
+
+#define RCC_MP_AHB6RSTCLRR 0x218
+#define RCC_MP_AHB6ENSETR 0x19c
+
+ /* Set up FMC2 bus for KS8851-16MLL and X11 SRAM */
+ writel(BIT(12), STM32_RCC_BASE + RCC_MP_AHB6RSTCLRR);
+ writel(BIT(12), STM32_RCC_BASE + RCC_MP_AHB6ENSETR);
+
+ /* KS8851-16MLL */
+ writel(0x000010db, STM32_FMC2_BASE + STM32_FMC2_BCR(1));
+ writel(0xc0022222, STM32_FMC2_BASE + STM32_FMC2_BTR(1));
+ /* AS7C34098 SRAM on X11 */
+ writel(0x000010db, STM32_FMC2_BASE + STM32_FMC2_BCR(3));
+ writel(0xc0022222, STM32_FMC2_BASE + STM32_FMC2_BTR(3));
+
+ setbits_le32(STM32_FMC2_BASE + STM32_FMC2_BCR1, BIT(31));
+}
+
/* board dependent setup after realloc */
int board_init(void)
{
@@ -399,6 +425,8 @@ int board_init(void)
sysconf_init();
+ board_init_fmc2();
+
if (CONFIG_IS_ENABLED(CONFIG_LED))
led_default_state();
diff --git a/configs/stm32mp15_dhcom_basic_defconfig b/configs/stm32mp15_dhcom_basic_defconfig
index 921dea242a..683f15e7d5 100644
--- a/configs/stm32mp15_dhcom_basic_defconfig
+++ b/configs/stm32mp15_dhcom_basic_defconfig
@@ -93,6 +93,7 @@ CONFIG_SPI_FLASH_MTD=y
CONFIG_SPL_SPI_FLASH_MTD=y
CONFIG_DM_ETH=y
CONFIG_DWC_ETH_QOS=y
+CONFIG_KS8851_MLL=y
CONFIG_PHY=y
CONFIG_PHY_STM32_USBPHYC=y
CONFIG_PINCONF=y
--
2.25.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2
2020-03-26 15:58 [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2 Marek Vasut
@ 2020-03-27 8:55 ` Patrice CHOTARD
2020-03-28 1:00 ` Marek Vasut
2020-04-01 13:30 ` Patrick DELAUNAY
1 sibling, 1 reply; 11+ messages in thread
From: Patrice CHOTARD @ 2020-03-27 8:55 UTC (permalink / raw)
To: u-boot
Hi Marek
You have forgotten to take into account some of my previous remarks on V2
On 3/26/20 4:58 PM, Marek Vasut wrote:
> Add DT entries, Kconfig entries and board-specific entries to configure
> FMC2 bus and make KS8851-16MLL on that bus accessible to U-Boot.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Patrick Delaunay <patrick.delaunay@st.com>
> Cc: Patrice Chotard <patrice.chotard@st.com>
> ---
> V2: Configure FMC2 nCS4 for SRAM as well
> V3: Adjust the register macros
> ---
> arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi | 68 ++++++++++++++++++++++
> board/dhelectronics/dh_stm32mp1/board.c | 28 +++++++++
> configs/stm32mp15_dhcom_basic_defconfig | 1 +
> 3 files changed, 97 insertions(+)
>
> diff --git a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi
> index 6c952a57ee..eba3588540 100644
> --- a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi
> +++ b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi
> @@ -37,6 +37,12 @@
> default-state = "on";
> };
> };
> +
> + /* This is actually on FMC2, but we do not have bus driver for that */
> + ksz8851: ks8851mll at 64000000 {
> + compatible = "micrel,ks8851-mll";
> + reg = <0x64000000 0x20000>;
> + };
> };
>
> &i2c4 {
> @@ -50,6 +56,68 @@
> };
> };
>
> +&pinctrl {
> + /* These should bound to FMC2 bus driver, but we do not have one */
> + pinctrl-0 = <&fmc_pins_b>;
> + pinctrl-1 = <&fmc_sleep_pins_b>;
> + pinctrl-names = "default", "sleep";
> +
> + fmc_pins_b: fmc-0 {
> + pins1 {
> + pinmux = <STM32_PINMUX('D', 4, AF12)>, /* FMC_NOE */
> + <STM32_PINMUX('D', 5, AF12)>, /* FMC_NWE */
> + <STM32_PINMUX('B', 7, AF12)>, /* FMC_NL */
> + <STM32_PINMUX('D', 14, AF12)>, /* FMC_D0 */
> + <STM32_PINMUX('D', 15, AF12)>, /* FMC_D1 */
> + <STM32_PINMUX('D', 0, AF12)>, /* FMC_D2 */
> + <STM32_PINMUX('D', 1, AF12)>, /* FMC_D3 */
> + <STM32_PINMUX('E', 7, AF12)>, /* FMC_D4 */
> + <STM32_PINMUX('E', 8, AF12)>, /* FMC_D5 */
> + <STM32_PINMUX('E', 9, AF12)>, /* FMC_D6 */
> + <STM32_PINMUX('E', 10, AF12)>, /* FMC_D7 */
> + <STM32_PINMUX('E', 11, AF12)>, /* FMC_D8 */
> + <STM32_PINMUX('E', 12, AF12)>, /* FMC_D9 */
> + <STM32_PINMUX('E', 13, AF12)>, /* FMC_D10 */
> + <STM32_PINMUX('E', 14, AF12)>, /* FMC_D11 */
> + <STM32_PINMUX('E', 15, AF12)>, /* FMC_D12 */
> + <STM32_PINMUX('D', 8, AF12)>, /* FMC_D13 */
> + <STM32_PINMUX('D', 9, AF12)>, /* FMC_D14 */
> + <STM32_PINMUX('D', 10, AF12)>, /* FMC_D15 */
> + <STM32_PINMUX('G', 9, AF12)>, /* FMC_NE2_FMC_NCE */
> + <STM32_PINMUX('G', 12, AF12)>; /* FMC_NE4 */
> + bias-disable;
> + drive-push-pull;
> + slew-rate = <3>;
> + };
> + };
> +
> + fmc_sleep_pins_b: fmc-sleep-0 {
> + pins {
> + pinmux = <STM32_PINMUX('D', 4, ANALOG)>, /* FMC_NOE */
> + <STM32_PINMUX('D', 5, ANALOG)>, /* FMC_NWE */
> + <STM32_PINMUX('B', 7, ANALOG)>, /* FMC_NL */
> + <STM32_PINMUX('D', 14, ANALOG)>, /* FMC_D0 */
> + <STM32_PINMUX('D', 15, ANALOG)>, /* FMC_D1 */
> + <STM32_PINMUX('D', 0, ANALOG)>, /* FMC_D2 */
> + <STM32_PINMUX('D', 1, ANALOG)>, /* FMC_D3 */
> + <STM32_PINMUX('E', 7, ANALOG)>, /* FMC_D4 */
> + <STM32_PINMUX('E', 8, ANALOG)>, /* FMC_D5 */
> + <STM32_PINMUX('E', 9, ANALOG)>, /* FMC_D6 */
> + <STM32_PINMUX('E', 10, ANALOG)>, /* FMC_D7 */
> + <STM32_PINMUX('E', 11, ANALOG)>, /* FMC_D8 */
> + <STM32_PINMUX('E', 12, ANALOG)>, /* FMC_D9 */
> + <STM32_PINMUX('E', 13, ANALOG)>, /* FMC_D10 */
> + <STM32_PINMUX('E', 14, ANALOG)>, /* FMC_D11 */
> + <STM32_PINMUX('E', 15, ANALOG)>, /* FMC_D12 */
> + <STM32_PINMUX('D', 8, ANALOG)>, /* FMC_D13 */
> + <STM32_PINMUX('D', 9, ANALOG)>, /* FMC_D14 */
> + <STM32_PINMUX('D', 10, ANALOG)>, /* FMC_D15 */
> + <STM32_PINMUX('G', 9, ANALOG)>, /* FMC_NE2_FMC_NCE */
> + <STM32_PINMUX('G', 12, ANALOG)>; /* FMC_NE4 */
> + };
> + };
> +};
> +
> &pmic {
> u-boot,dm-pre-reloc;
> };
> diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c
> index b663696983..be55242799 100644
> --- a/board/dhelectronics/dh_stm32mp1/board.c
> +++ b/board/dhelectronics/dh_stm32mp1/board.c
> @@ -376,6 +376,32 @@ static void sysconf_init(void)
> #endif
> }
>
> +static void board_init_fmc2(void)
> +{
> +#define STM32_FMC2_BCR1 0x0
> +#define STM32_FMC2_BTR1 0x4
> +#define STM32_FMC2_BWTR1 0x104
> +#define STM32_FMC2_BCR(x) ((x) * 0x8 + STM32_FMC2_BCR1)
> +#define STM32_FMC2_BTR(x) ((x) * 0x8 + STM32_FMC2_BTR1)
> +#define STM32_FMC2_BWTR(x) ((x) * 0x8 + STM32_FMC2_BWTR1)
All these defines can be put in ./arch/arm/mach-stm32mp/include/mach/stm32.h
> +
> +#define RCC_MP_AHB6RSTCLRR 0x218
> +#define RCC_MP_AHB6ENSETR 0x19c
> +
> + /* Set up FMC2 bus for KS8851-16MLL and X11 SRAM */
> + writel(BIT(12), STM32_RCC_BASE + RCC_MP_AHB6RSTCLRR);
> + writel(BIT(12), STM32_RCC_BASE + RCC_MP_AHB6ENSETR);
> +
Add a define for AHB6RSTCLRR and AHB6ENSETR BIT(12)
> + /* KS8851-16MLL */
> + writel(0x000010db, STM32_FMC2_BASE + STM32_FMC2_BCR(1));
> + writel(0xc0022222, STM32_FMC2_BASE + STM32_FMC2_BTR(1));
> + /* AS7C34098 SRAM on X11 */
> + writel(0x000010db, STM32_FMC2_BASE + STM32_FMC2_BCR(3));
> + writel(0xc0022222, STM32_FMC2_BASE + STM32_FMC2_BTR(3));
> +
Avoid to put hardcoded value, it difficult to see what is done, add defines.
> + setbits_le32(STM32_FMC2_BASE + STM32_FMC2_BCR1, BIT(31));
Add a define for FMC2_BCR1 BIT(31) , it will be easier to understand what is done
thanks
Patrice
> +}
> +
> /* board dependent setup after realloc */
> int board_init(void)
> {
> @@ -399,6 +425,8 @@ int board_init(void)
>
> sysconf_init();
>
> + board_init_fmc2();
> +
> if (CONFIG_IS_ENABLED(CONFIG_LED))
> led_default_state();
>
> diff --git a/configs/stm32mp15_dhcom_basic_defconfig b/configs/stm32mp15_dhcom_basic_defconfig
> index 921dea242a..683f15e7d5 100644
> --- a/configs/stm32mp15_dhcom_basic_defconfig
> +++ b/configs/stm32mp15_dhcom_basic_defconfig
> @@ -93,6 +93,7 @@ CONFIG_SPI_FLASH_MTD=y
> CONFIG_SPL_SPI_FLASH_MTD=y
> CONFIG_DM_ETH=y
> CONFIG_DWC_ETH_QOS=y
> +CONFIG_KS8851_MLL=y
> CONFIG_PHY=y
> CONFIG_PHY_STM32_USBPHYC=y
> CONFIG_PINCONF=y
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2
2020-03-27 8:55 ` Patrice CHOTARD
@ 2020-03-28 1:00 ` Marek Vasut
0 siblings, 0 replies; 11+ messages in thread
From: Marek Vasut @ 2020-03-28 1:00 UTC (permalink / raw)
To: u-boot
On 3/27/20 9:55 AM, Patrice CHOTARD wrote:
> Hi Marek
Hi,
[...]
>> diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c
>> index b663696983..be55242799 100644
>> --- a/board/dhelectronics/dh_stm32mp1/board.c
>> +++ b/board/dhelectronics/dh_stm32mp1/board.c
>> @@ -376,6 +376,32 @@ static void sysconf_init(void)
>> #endif
>> }
>>
>> +static void board_init_fmc2(void)
>> +{
>> +#define STM32_FMC2_BCR1 0x0
>> +#define STM32_FMC2_BTR1 0x4
>> +#define STM32_FMC2_BWTR1 0x104
>> +#define STM32_FMC2_BCR(x) ((x) * 0x8 + STM32_FMC2_BCR1)
>> +#define STM32_FMC2_BTR(x) ((x) * 0x8 + STM32_FMC2_BTR1)
>> +#define STM32_FMC2_BWTR(x) ((x) * 0x8 + STM32_FMC2_BWTR1)
>
>
> All these defines can be put in ./arch/arm/mach-stm32mp/include/mach/stm32.h
No, we need a driver for FMC2, that's where they should go.
This is a stopgap solution.
>> +#define RCC_MP_AHB6RSTCLRR 0x218
>> +#define RCC_MP_AHB6ENSETR 0x19c
>> +
>> + /* Set up FMC2 bus for KS8851-16MLL and X11 SRAM */
>> + writel(BIT(12), STM32_RCC_BASE + RCC_MP_AHB6RSTCLRR);
>> + writel(BIT(12), STM32_RCC_BASE + RCC_MP_AHB6ENSETR);
>> +
>
> Add a define for AHB6RSTCLRR and AHB6ENSETR BIT(12)
Maybe you should fix board/stm32mp1 and arch/arm/mach-stm32mp to do the
same ? :)
>> + /* KS8851-16MLL */
>> + writel(0x000010db, STM32_FMC2_BASE + STM32_FMC2_BCR(1));
>> + writel(0xc0022222, STM32_FMC2_BASE + STM32_FMC2_BTR(1));
>> + /* AS7C34098 SRAM on X11 */
>> + writel(0x000010db, STM32_FMC2_BASE + STM32_FMC2_BCR(3));
>> + writel(0xc0022222, STM32_FMC2_BASE + STM32_FMC2_BTR(3));
>> +
>
> Avoid to put hardcoded value, it difficult to see what is done, add defines.
>
>> + setbits_le32(STM32_FMC2_BASE + STM32_FMC2_BCR1, BIT(31));
>
> Add a define for FMC2_BCR1 BIT(31) , it will be easier to understand what is done
OK
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2
2020-03-26 15:58 [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2 Marek Vasut
2020-03-27 8:55 ` Patrice CHOTARD
@ 2020-04-01 13:30 ` Patrick DELAUNAY
2020-04-09 11:27 ` Marek Vasut
1 sibling, 1 reply; 11+ messages in thread
From: Patrick DELAUNAY @ 2020-04-01 13:30 UTC (permalink / raw)
To: u-boot
Hi Marek,
> From: Marek Vasut <marex@denx.de>
> Sent: jeudi 26 mars 2020 16:58
>
> Add DT entries, Kconfig entries and board-specific entries to configure
> FMC2 bus and make KS8851-16MLL on that bus accessible to U-Boot.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Patrick Delaunay <patrick.delaunay@st.com>
> Cc: Patrice Chotard <patrice.chotard@st.com>
> ---
> V2: Configure FMC2 nCS4 for SRAM as well
> V3: Adjust the register macros
> ---
> arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi | 68 ++++++++++++++++++++++
> board/dhelectronics/dh_stm32mp1/board.c | 28 +++++++++
> configs/stm32mp15_dhcom_basic_defconfig | 1 +
> 3 files changed, 97 insertions(+)
>
> diff --git a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi
> b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi
> index 6c952a57ee..eba3588540 100644
> --- a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi
> +++ b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi
> @@ -37,6 +37,12 @@
> default-state = "on";
> };
> };
> +
> + /* This is actually on FMC2, but we do not have bus driver for that */
> + ksz8851: ks8851mll at 64000000 {
> + compatible = "micrel,ks8851-mll";
> + reg = <0x64000000 0x20000>;
> + };
> };
>
> &i2c4 {
> @@ -50,6 +56,68 @@
> };
> };
>
> +&pinctrl {
> + /* These should bound to FMC2 bus driver, but we do not have one */
As temporarily solution (waiting final solution and real FMC2 bus driver)
can you define a NO_OP in board device associated to existing compatible
= "st,stm32mp15-fmc2"
> + pinctrl-0 = <&fmc_pins_b>;
> + pinctrl-1 = <&fmc_sleep_pins_b>;
> + pinctrl-names = "default", "sleep";
> +
> + fmc_pins_b: fmc-0 {
> + pins1 {
[...]
> + };
> + };
> +
> + fmc_sleep_pins_b: fmc-sleep-0 {
> + pins {
[...]
> + };
> + };
> +};
> +
> &pmic {
> u-boot,dm-pre-reloc;
> };
For example
&fmc {
pinctrl-names = "default", "sleep";
pinctrl-0 = <& fmc_pins_b>;
pinctrl-1 = <& fmc_sleep_pins_b>;
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
};
static const struct udevice_id stm32_fmc2_bus_ids[] = {
{.compatible = "st,stm32mp15-fmc2},
{ }
};
U_BOOT_DRIVER(stm32_fmc2_bus) = {
.name = "stm32mp15-fmc2-ids",
.id = UCLASS_NOP,
.of_match = stm32_fmc2_bus_ids,
.bind = stm32_fmc2_bus,
};
> diff --git a/board/dhelectronics/dh_stm32mp1/board.c
> b/board/dhelectronics/dh_stm32mp1/board.c
> index b663696983..be55242799 100644
> --- a/board/dhelectronics/dh_stm32mp1/board.c
> +++ b/board/dhelectronics/dh_stm32mp1/board.c
> @@ -376,6 +376,32 @@ static void sysconf_init(void) #endif }
>
> +static void board_init_fmc2(void)
> +{
Can you use device-tree information (to avoid hardcoded address STM32_FMC2_BASE).
For me, the address should be used only when the information are
not available in device tree or before the device tree availability (in pre-reloc phasis)
ofnode = ofnode_by_compatible(ofnode_null(), "st,stm32mp15-fmc2");
fmc2_addr = ofnode_get_addr(node);
or use NOP device as proposed previously.
PS: it is a preliminary step/temporarily solution, waiting FMC2 the bus driver availability.
> +#define STM32_FMC2_BCR1 0x0
> +#define STM32_FMC2_BTR1 0x4
> +#define STM32_FMC2_BWTR1 0x104
> +#define STM32_FMC2_BCR(x) ((x) * 0x8 + STM32_FMC2_BCR1)
> +#define STM32_FMC2_BTR(x) ((x) * 0x8 + STM32_FMC2_BTR1)
> +#define STM32_FMC2_BWTR(x) ((x) * 0x8 + STM32_FMC2_BWTR1)
> +
> +#define RCC_MP_AHB6RSTCLRR 0x218
> +#define RCC_MP_AHB6ENSETR 0x19c
> +
> + /* Set up FMC2 bus for KS8851-16MLL and X11 SRAM */
> + writel(BIT(12), STM32_RCC_BASE + RCC_MP_AHB6RSTCLRR);
> + writel(BIT(12), STM32_RCC_BASE + RCC_MP_AHB6ENSETR);
Use clk and reset driver model and DT, for example:
struct clk clk;
struct reset_ctl reset;
clk_get_by_index_nodev(ofnode, 0, &clk ;
clk_get_by_index_nodev(ofnode, 0, &reset);
> + /* KS8851-16MLL */
> + writel(0x000010db, STM32_FMC2_BASE + STM32_FMC2_BCR(1));
> + writel(0xc0022222, STM32_FMC2_BASE + STM32_FMC2_BTR(1));
> + /* AS7C34098 SRAM on X11 */
> + writel(0x000010db, STM32_FMC2_BASE + STM32_FMC2_BCR(3));
> + writel(0xc0022222, STM32_FMC2_BASE + STM32_FMC2_BTR(3));
> +
> + setbits_le32(STM32_FMC2_BASE + STM32_FMC2_BCR1, BIT(31)); }
> +
> /* board dependent setup after realloc */ int board_init(void) { @@ -399,6 +425,8
> @@ int board_init(void)
>
> sysconf_init();
>
> + board_init_fmc2();
> +
> if (CONFIG_IS_ENABLED(CONFIG_LED))
> led_default_state();
>
> diff --git a/configs/stm32mp15_dhcom_basic_defconfig
> b/configs/stm32mp15_dhcom_basic_defconfig
> index 921dea242a..683f15e7d5 100644
> --- a/configs/stm32mp15_dhcom_basic_defconfig
> +++ b/configs/stm32mp15_dhcom_basic_defconfig
> @@ -93,6 +93,7 @@ CONFIG_SPI_FLASH_MTD=y
> CONFIG_SPL_SPI_FLASH_MTD=y CONFIG_DM_ETH=y
> CONFIG_DWC_ETH_QOS=y
> +CONFIG_KS8851_MLL=y
> CONFIG_PHY=y
> CONFIG_PHY_STM32_USBPHYC=y
> CONFIG_PINCONF=y
> --
> 2.25.1
Regards
Patrick
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2
2020-04-01 13:30 ` Patrick DELAUNAY
@ 2020-04-09 11:27 ` Marek Vasut
2020-04-09 17:38 ` Patrick DELAUNAY
0 siblings, 1 reply; 11+ messages in thread
From: Marek Vasut @ 2020-04-09 11:27 UTC (permalink / raw)
To: u-boot
On 4/1/20 3:30 PM, Patrick DELAUNAY wrote:
> Hi Marek,
Hi,
[...]
>> +&pinctrl {
>> + /* These should bound to FMC2 bus driver, but we do not have one */
>
> As temporarily solution (waiting final solution and real FMC2 bus driver)
> can you define a NO_OP in board device associated to existing compatible
> = "st,stm32mp15-fmc2"
NO_OP ?
>> + pinctrl-0 = <&fmc_pins_b>;
>> + pinctrl-1 = <&fmc_sleep_pins_b>;
>> + pinctrl-names = "default", "sleep";
>> +
>> + fmc_pins_b: fmc-0 {
>> + pins1 {
> [...]
>> + };
>> + };
>> +
>> + fmc_sleep_pins_b: fmc-sleep-0 {
>> + pins {
> [...]
>> + };
>> + };
>> +};
>> +
>> &pmic {
>> u-boot,dm-pre-reloc;
>> };
>
> For example
>
> &fmc {
> pinctrl-names = "default", "sleep";
> pinctrl-0 = <& fmc_pins_b>;
> pinctrl-1 = <& fmc_sleep_pins_b>;
> status = "okay";
> #address-cells = <1>;
> #size-cells = <0>;
> };
>
> static const struct udevice_id stm32_fmc2_bus_ids[] = {
> {.compatible = "st,stm32mp15-fmc2},
> { }
> };
>
> U_BOOT_DRIVER(stm32_fmc2_bus) = {
> .name = "stm32mp15-fmc2-ids",
> .id = UCLASS_NOP,
> .of_match = stm32_fmc2_bus_ids,
> .bind = stm32_fmc2_bus,
> };
That looks like a hack, it would collide with the actual FMC2 driver and
it seems the FMC2 DT compatible string is not even stable yet (cfr the
Linux patches). So I am reluctant to do anything like depending on the
FMC DT bindings thus far.
>> diff --git a/board/dhelectronics/dh_stm32mp1/board.c
>> b/board/dhelectronics/dh_stm32mp1/board.c
>> index b663696983..be55242799 100644
>> --- a/board/dhelectronics/dh_stm32mp1/board.c
>> +++ b/board/dhelectronics/dh_stm32mp1/board.c
>> @@ -376,6 +376,32 @@ static void sysconf_init(void) #endif }
>>
>> +static void board_init_fmc2(void)
>> +{
>
> Can you use device-tree information (to avoid hardcoded address STM32_FMC2_BASE).
>
> For me, the address should be used only when the information are
> not available in device tree or before the device tree availability (in pre-reloc phasis)
>
> ofnode = ofnode_by_compatible(ofnode_null(), "st,stm32mp15-fmc2");
> fmc2_addr = ofnode_get_addr(node);
>
> or use NOP device as proposed previously.
>
> PS: it is a preliminary step/temporarily solution, waiting FMC2 the bus driver availability.
Or, I can just use the address directly, which means no DT traversal, so
simpler code and faster boot time.
>> +#define STM32_FMC2_BCR1 0x0
>> +#define STM32_FMC2_BTR1 0x4
>> +#define STM32_FMC2_BWTR1 0x104
>> +#define STM32_FMC2_BCR(x) ((x) * 0x8 + STM32_FMC2_BCR1)
>> +#define STM32_FMC2_BTR(x) ((x) * 0x8 + STM32_FMC2_BTR1)
>> +#define STM32_FMC2_BWTR(x) ((x) * 0x8 + STM32_FMC2_BWTR1)
>> +
>> +#define RCC_MP_AHB6RSTCLRR 0x218
>> +#define RCC_MP_AHB6ENSETR 0x19c
>> +
>> + /* Set up FMC2 bus for KS8851-16MLL and X11 SRAM */
>> + writel(BIT(12), STM32_RCC_BASE + RCC_MP_AHB6RSTCLRR);
>> + writel(BIT(12), STM32_RCC_BASE + RCC_MP_AHB6ENSETR);
>
> Use clk and reset driver model and DT, for example:
>
> struct clk clk;
> struct reset_ctl reset;
>
> clk_get_by_index_nodev(ofnode, 0, &clk ;
> clk_get_by_index_nodev(ofnode, 0, &reset);
This very much looks like I can just write the entire bus driver by now,
instead of just writing these few registers in a real simple way, until
the bus driver exists.
But since the bindings aren't stable, I am not very inclined to do that.
[...]
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2
2020-04-09 11:27 ` Marek Vasut
@ 2020-04-09 17:38 ` Patrick DELAUNAY
2020-04-10 18:11 ` Marek Vasut
0 siblings, 1 reply; 11+ messages in thread
From: Patrick DELAUNAY @ 2020-04-09 17:38 UTC (permalink / raw)
To: u-boot
Dear Marek,
> From: Marek Vasut <marex@denx.de>
> Sent: jeudi 9 avril 2020 13:27
>
> On 4/1/20 3:30 PM, Patrick DELAUNAY wrote:
> > Hi Marek,
>
> Hi,
>
> [...]
>
> >> +&pinctrl {
> >> + /* These should bound to FMC2 bus driver, but we do not have one */
> >
> > As temporarily solution (waiting final solution and real FMC2 bus
> > driver) can you define a NO_OP in board device associated to existing
> > compatible = "st,stm32mp15-fmc2"
>
> NO_OP ?
Sorry, UCLASS_NOP
After debate with Christophe, I agree that i sis other complicated
for temporarily solution.
> >> + pinctrl-0 = <&fmc_pins_b>;
> >> + pinctrl-1 = <&fmc_sleep_pins_b>;
> >> + pinctrl-names = "default", "sleep";
> >> +
> >> + fmc_pins_b: fmc-0 {
> >> + pins1 {
> > [...]
> >> + };
> >> + };
> >> +
> >> + fmc_sleep_pins_b: fmc-sleep-0 {
> >> + pins {
> > [...]
> >> + };
> >> + };
> >> +};
> >> +
> >> &pmic {
> >> u-boot,dm-pre-reloc;
> >> };
> >
> > For example
> >
> > &fmc {
> > pinctrl-names = "default", "sleep";
> > pinctrl-0 = <& fmc_pins_b>;
> > pinctrl-1 = <& fmc_sleep_pins_b>;
> > status = "okay";
> > #address-cells = <1>;
> > #size-cells = <0>;
> > };
> >
> > static const struct udevice_id stm32_fmc2_bus_ids[] = {
> > {.compatible = "st,stm32mp15-fmc2},
> > { }
> > };
> >
> > U_BOOT_DRIVER(stm32_fmc2_bus) = {
> > .name = "stm32mp15-fmc2-ids",
> > .id = UCLASS_NOP,
> > .of_match = stm32_fmc2_bus_ids,
> > .bind = stm32_fmc2_bus,
> > };
>
> That looks like a hack, it would collide with the actual FMC2 driver and it seems
> the FMC2 DT compatible string is not even stable yet (cfr the Linux patches). So I
> am reluctant to do anything like depending on the FMC DT bindings thus far.
You are aligned with Christophe, he push me to accept your temporarily solution.
[...]
> > Use clk and reset driver model and DT, for example:
> >
> > struct clk clk;
> > struct reset_ctl reset;
> >
> > clk_get_by_index_nodev(ofnode, 0, &clk ;
> > clk_get_by_index_nodev(ofnode, 0, &reset);
>
> This very much looks like I can just write the entire bus driver by now, instead of
> just writing these few registers in a real simple way, until the bus driver exists.
>
> But since the bindings aren't stable, I am not very inclined to do that.
I am convinced now (thanks to Christophe) to keep it simple as it is a temporarily
solution.
Reviewed-by: Patrick Delaunay <patrick.delaunay@st.com>
Thanks
Patrick
>
> [...]
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2
2020-04-09 17:38 ` Patrick DELAUNAY
@ 2020-04-10 18:11 ` Marek Vasut
2020-04-14 7:23 ` Christophe Kerello
0 siblings, 1 reply; 11+ messages in thread
From: Marek Vasut @ 2020-04-10 18:11 UTC (permalink / raw)
To: u-boot
On 4/9/20 7:38 PM, Patrick DELAUNAY wrote:
Hi,
[...]
>> That looks like a hack, it would collide with the actual FMC2 driver and it seems
>> the FMC2 DT compatible string is not even stable yet (cfr the Linux patches). So I
>> am reluctant to do anything like depending on the FMC DT bindings thus far.
>
> You are aligned with Christophe, he push me to accept your temporarily solution.
Great, thanks.
I had a look into writing the bus driver in the meantime, but it's not
as simple as I originally anticipated. So, I'll wait until the Linux DT
bindings stabilize and revisit it then.
Thanks
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2
2020-04-10 18:11 ` Marek Vasut
@ 2020-04-14 7:23 ` Christophe Kerello
2020-04-14 11:56 ` Marek Vasut
0 siblings, 1 reply; 11+ messages in thread
From: Christophe Kerello @ 2020-04-14 7:23 UTC (permalink / raw)
To: u-boot
On 4/10/20 8:11 PM, Marek Vasut wrote:
> On 4/9/20 7:38 PM, Patrick DELAUNAY wrote:
> Hi,
>
> [...]
>
>>> That looks like a hack, it would collide with the actual FMC2 driver and it seems
>>> the FMC2 DT compatible string is not even stable yet (cfr the Linux patches). So I
>>> am reluctant to do anything like depending on the FMC DT bindings thus far.
>>
>> You are aligned with Christophe, he push me to accept your temporarily solution.
>
> Great, thanks.
>
> I had a look into writing the bus driver in the meantime, but it's not
> as simple as I originally anticipated. So, I'll wait until the Linux DT
> bindings stabilize and revisit it then.
>
> Thanks
>
Hi Marek,
I have already prepared a set of patches to add the full FMC2 support in
U-Boot based on kernel drivers. I am currently waiting for the bindings
and the drivers being reviewed on kernel side.
Regards,
Christophe Kerello.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2
2020-04-14 7:23 ` Christophe Kerello
@ 2020-04-14 11:56 ` Marek Vasut
2020-04-14 12:16 ` Christophe Kerello
0 siblings, 1 reply; 11+ messages in thread
From: Marek Vasut @ 2020-04-14 11:56 UTC (permalink / raw)
To: u-boot
On 4/14/20 9:23 AM, Christophe Kerello wrote:
>
>
> On 4/10/20 8:11 PM, Marek Vasut wrote:
>> On 4/9/20 7:38 PM, Patrick DELAUNAY wrote:
>> Hi,
>>
>> [...]
>>
>>>> That looks like a hack, it would collide with the actual FMC2 driver
>>>> and it seems
>>>> the FMC2 DT compatible string is not even stable yet (cfr the Linux
>>>> patches). So I
>>>> am reluctant to do anything like depending on the FMC DT bindings
>>>> thus far.
>>>
>>> You are aligned with Christophe, he push me to accept your
>>> temporarily solution.
>>
>> Great, thanks.
>>
>> I had a look into writing the bus driver in the meantime, but it's not
>> as simple as I originally anticipated. So, I'll wait until the Linux DT
>> bindings stabilize and revisit it then.
>>
>> Thanks
>>
>
> Hi Marek,
>
> I have already prepared a set of patches to add the full FMC2 support in
> U-Boot based on kernel drivers. I am currently waiting for the bindings
> and the drivers being reviewed on kernel side.
Great, thanks.
I'll switch to that one once it's upstream, but I don't see a reason to
block this patch until then.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2
2020-04-14 11:56 ` Marek Vasut
@ 2020-04-14 12:16 ` Christophe Kerello
2020-04-14 12:18 ` Marek Vasut
0 siblings, 1 reply; 11+ messages in thread
From: Christophe Kerello @ 2020-04-14 12:16 UTC (permalink / raw)
To: u-boot
On 4/14/20 1:56 PM, Marek Vasut wrote:
> On 4/14/20 9:23 AM, Christophe Kerello wrote:
>>
>>
>> On 4/10/20 8:11 PM, Marek Vasut wrote:
>>> On 4/9/20 7:38 PM, Patrick DELAUNAY wrote:
>>> Hi,
>>>
>>> [...]
>>>
>>>>> That looks like a hack, it would collide with the actual FMC2 driver
>>>>> and it seems
>>>>> the FMC2 DT compatible string is not even stable yet (cfr the Linux
>>>>> patches). So I
>>>>> am reluctant to do anything like depending on the FMC DT bindings
>>>>> thus far.
>>>>
>>>> You are aligned with Christophe, he push me to accept your
>>>> temporarily solution.
>>>
>>> Great, thanks.
>>>
>>> I had a look into writing the bus driver in the meantime, but it's not
>>> as simple as I originally anticipated. So, I'll wait until the Linux DT
>>> bindings stabilize and revisit it then.
>>>
>>> Thanks
>>>
>>
>> Hi Marek,
>>
>> I have already prepared a set of patches to add the full FMC2 support in
>> U-Boot based on kernel drivers. I am currently waiting for the bindings
>> and the drivers being reviewed on kernel side.
>
> Great, thanks.
>
> I'll switch to that one once it's upstream, but I don't see a reason to
> block this patch until then.
>
Hi Marek,
Yes, we are aligned. We are not going to block this patch.
Regards,
Christophe Kerello.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2
2020-04-14 12:16 ` Christophe Kerello
@ 2020-04-14 12:18 ` Marek Vasut
0 siblings, 0 replies; 11+ messages in thread
From: Marek Vasut @ 2020-04-14 12:18 UTC (permalink / raw)
To: u-boot
On 4/14/20 2:16 PM, Christophe Kerello wrote:
>
>
> On 4/14/20 1:56 PM, Marek Vasut wrote:
>> On 4/14/20 9:23 AM, Christophe Kerello wrote:
>>>
>>>
>>> On 4/10/20 8:11 PM, Marek Vasut wrote:
>>>> On 4/9/20 7:38 PM, Patrick DELAUNAY wrote:
>>>> Hi,
>>>>
>>>> [...]
>>>>
>>>>>> That looks like a hack, it would collide with the actual FMC2 driver
>>>>>> and it seems
>>>>>> the FMC2 DT compatible string is not even stable yet (cfr the Linux
>>>>>> patches). So I
>>>>>> am reluctant to do anything like depending on the FMC DT bindings
>>>>>> thus far.
>>>>>
>>>>> You are aligned with Christophe, he push me to accept your
>>>>> temporarily solution.
>>>>
>>>> Great, thanks.
>>>>
>>>> I had a look into writing the bus driver in the meantime, but it's not
>>>> as simple as I originally anticipated. So, I'll wait until the Linux DT
>>>> bindings stabilize and revisit it then.
>>>>
>>>> Thanks
>>>>
>>>
>>> Hi Marek,
>>>
>>> I have already prepared a set of patches to add the full FMC2 support in
>>> U-Boot based on kernel drivers. I am currently waiting for the bindings
>>> and the drivers being reviewed on kernel side.
>>
>> Great, thanks.
>>
>> I'll switch to that one once it's upstream, but I don't see a reason to
>> block this patch until then.
>>
>
> Hi Marek,
>
> Yes, we are aligned. We are not going to block this patch.
Great, thanks.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2020-04-14 12:18 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-26 15:58 [PATCH V3] ARM: dts: stm32: Add KS8851-16MLL ethernet on FMC2 Marek Vasut
2020-03-27 8:55 ` Patrice CHOTARD
2020-03-28 1:00 ` Marek Vasut
2020-04-01 13:30 ` Patrick DELAUNAY
2020-04-09 11:27 ` Marek Vasut
2020-04-09 17:38 ` Patrick DELAUNAY
2020-04-10 18:11 ` Marek Vasut
2020-04-14 7:23 ` Christophe Kerello
2020-04-14 11:56 ` Marek Vasut
2020-04-14 12:16 ` Christophe Kerello
2020-04-14 12:18 ` Marek Vasut
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.