From 009b108d808c1fc1da7f14e7d7190856e942bb17 Mon Sep 17 00:00:00 2001 From: Eugen Hristev Date: Tue, 4 Jan 2022 18:21:02 +0200 Subject: [PATCH 1/5] i2c: at91: add compatible with microchip,sam9x60-i2c Add compatible and data platform struct for sam9x60 SoC. Signed-off-by: Eugen Hristev Reviewed-by: Heiko Schocher --- drivers/i2c/at91_i2c.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/i2c/at91_i2c.c b/drivers/i2c/at91_i2c.c index 6b4c0e48045..e743d2a849a 100644 --- a/drivers/i2c/at91_i2c.c +++ b/drivers/i2c/at91_i2c.c @@ -305,6 +305,11 @@ static const struct at91_i2c_pdata sama5d2_config = { .clk_offset = 3, }; +static const struct at91_i2c_pdata sam9x60_config = { + .clk_max_div = 7, + .clk_offset = 3, +}; + static const struct udevice_id at91_i2c_ids[] = { { .compatible = "atmel,at91rm9200-i2c", .data = (long)&at91rm9200_config }, { .compatible = "atmel,at91sam9260-i2c", .data = (long)&at91sam9260_config }, @@ -314,6 +319,7 @@ static const struct udevice_id at91_i2c_ids[] = { { .compatible = "atmel,at91sam9x5-i2c", .data = (long)&at91sam9x5_config }, { .compatible = "atmel,sama5d4-i2c", .data = (long)&sama5d4_config }, { .compatible = "atmel,sama5d2-i2c", .data = (long)&sama5d2_config }, +{ .compatible = "microchip,sam9x60-i2c", .data = (long)&sam9x60_config }, { } }; From 93ddc09da26c04270e5829a8efbc299ccaa3d455 Mon Sep 17 00:00:00 2001 From: Mihai Sain Date: Mon, 20 Dec 2021 10:12:39 +0200 Subject: [PATCH 2/5] board: sama7g5ek: set blue led on at boot time Set blue led on at boot time in order to highlight that u-boot is loaded. Signed-off-by: Mihai Sain --- board/atmel/sama7g5ek/sama7g5ek.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/board/atmel/sama7g5ek/sama7g5ek.c b/board/atmel/sama7g5ek/sama7g5ek.c index 411b31160b9..ae18ed05e05 100644 --- a/board/atmel/sama7g5ek/sama7g5ek.c +++ b/board/atmel/sama7g5ek/sama7g5ek.c @@ -17,6 +17,13 @@ DECLARE_GLOBAL_DATA_PTR; +static void board_leds_init(void) +{ + atmel_pio4_set_pio_output(AT91_PIO_PORTB, 8, 0); /* LED RED */ + atmel_pio4_set_pio_output(AT91_PIO_PORTA, 13, 0); /* LED GREEN */ + atmel_pio4_set_pio_output(AT91_PIO_PORTD, 20, 1); /* LED BLUE */ +} + int board_late_init(void) { return 0; @@ -65,6 +72,8 @@ int board_init(void) /* address of boot parameters */ gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; + board_leds_init(); + return 0; } From 4727f954a44c089769b2164a95c1e141bb548870 Mon Sep 17 00:00:00 2001 From: Eugen Hristev Date: Tue, 4 Jan 2022 18:21:54 +0200 Subject: [PATCH 3/5] ARM: dts: at91: sama7g5: add flx8 and required nodes Add Flexcom8 node with required referenced nodes as phandles. Since Flexcom8 is present in Linux, take the node exactly as-is from Linux. Some nodes are referenced in Linux as phandles, the dma and the gic. Add them as well to the file, even if they are unused by Uboot. This is a step towards having the U-boot DT equivalent with the DT in Linux. Signed-off-by: Eugen Hristev --- arch/arm/dts/sama7g5.dtsi | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/arch/arm/dts/sama7g5.dtsi b/arch/arm/dts/sama7g5.dtsi index 4a3c675d344..2505a2f83d3 100644 --- a/arch/arm/dts/sama7g5.dtsi +++ b/arch/arm/dts/sama7g5.dtsi @@ -10,11 +10,15 @@ */ #include "skeleton.dtsi" +#include +#include #include +#include / { model = "Microchip SAMA7G5 family SoC"; compatible = "microchip,sama7g5"; + interrupt-parent = <&gic>; clocks { slow_rc_osc: slow_rc_osc { @@ -191,6 +195,52 @@ clock-names = "pclk", "hclk"; status = "disabled"; }; + + dma0: dma-controller@e2808000 { + compatible = "microchip,sama7g5-dma"; + reg = <0xe2808000 0x1000>; + interrupts = ; + #dma-cells = <1>; + clocks = <&pmc PMC_TYPE_PERIPHERAL 22>; + clock-names = "dma_clk"; + status = "disabled"; + }; + + flx8: flexcom@e2818000 { + compatible = "atmel,sama5d2-flexcom"; + reg = <0xe2818000 0x200>; + clocks = <&pmc PMC_TYPE_PERIPHERAL 46>; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0x0 0xe2818000 0x800>; + status = "disabled"; + + i2c8: i2c@600 { + compatible = "microchip,sama7g5-i2c", "microchip,sam9x60-i2c"; + reg = <0x600 0x200>; + interrupts = ; + #address-cells = <1>; + #size-cells = <0>; + clocks = <&pmc PMC_TYPE_PERIPHERAL 46>; + atmel,fifo-size = <32>; + dmas = <&dma0 AT91_XDMAC_DT_PERID(21)>, + <&dma0 AT91_XDMAC_DT_PERID(22)>; + dma-names = "rx", "tx"; + atmel,use-dma-rx; + atmel,use-dma-tx; + status = "disabled"; + }; + }; + + gic: interrupt-controller@e8c11000 { + compatible = "arm,cortex-a7-gic"; + #interrupt-cells = <3>; + #address-cells = <0>; + interrupt-controller; + interrupt-parent; + reg = <0xe8c11000 0x1000>, + <0xe8c12000 0x2000>; + }; }; }; }; From e92ebf9f250ad2c2cbd6073d075c17c7ed91852f Mon Sep 17 00:00:00 2001 From: Eugen Hristev Date: Tue, 4 Jan 2022 18:23:36 +0200 Subject: [PATCH 4/5] ARM: dts: at91: sama7g5ek: move eeproms to flexcom8 The rev4 of the board sama7g5ek has the eeproms on flexcom8 instead of flexcom1. Initialize flexcom8 with required pincontrol and move the eeproms accordingly. Signed-off-by: Eugen Hristev --- arch/arm/dts/sama7g5ek.dts | 39 +++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/arch/arm/dts/sama7g5ek.dts b/arch/arm/dts/sama7g5ek.dts index 16192ca0b15..6adb0442581 100644 --- a/arch/arm/dts/sama7g5ek.dts +++ b/arch/arm/dts/sama7g5ek.dts @@ -20,6 +20,7 @@ aliases { serial0 = &uart0; i2c0 = &i2c1; + i2c1 = &i2c8; }; chosen { @@ -92,17 +93,31 @@ pinctrl-names = "default"; pinctrl-0 = <&pinctrl_flx1_default>; status = "okay"; +}; - eeprom@52 { - compatible = "microchip,24aa02e48"; - reg = <0x52>; - pagesize = <16>; - }; +&flx8 { + atmel,flexcom-mode = ; + status = "okay"; - eeprom@53 { - compatible = "microchip,24aa02e48"; - reg = <0x53>; - pagesize = <16>; + i2c8: i2c@600 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c8_default>; + i2c-analog-filter; + i2c-digital-filter; + i2c-digital-filter-width-ns = <35>; + status = "okay"; + + eeprom@52 { + compatible = "microchip,24aa02e48"; + reg = <0x52>; + pagesize = <16>; + }; + + eeprom@53 { + compatible = "microchip,24aa02e48"; + reg = <0x53>; + pagesize = <16>; + }; }; }; @@ -145,6 +160,12 @@ bias-pull-up; }; + pinctrl_i2c8_default: i2c8_default { + pinmux = , + ; + bias-disable; + }; + pinctrl_qspi: qspi { pinmux = , , From dbf500b55770e58313df9fefa217129da38ea1b6 Mon Sep 17 00:00:00 2001 From: Eugen Hristev Date: Tue, 4 Jan 2022 18:25:21 +0200 Subject: [PATCH 5/5] configs: at91: sama7g5ek: enable CONFIG_PHANDLE_CHECK_SEQ CONFIG_PHANDLE_CHECK_SEQ will allow different sequence number for nodes that have the same name, but they are different. In sama7g5ek case, there are multiple 'i2c@600' nodes which are child nodes of different parent 'flexcom' nodes. These are different i2c busses even if the node is the same, and have to be differentiated. Without this config, the sequence number 0 is reused for two i2c busses, and this is something that we have to avoid: Looking for 'i2c' at 4704, name i2c@600 - serial0, /ahb/apb/serial@e1824200 - i2c0, /ahb/apb/flexcom@e181c000/i2c@600 Found seq 0 i2c_post_bind: i2c@600, seq=0 Looking for 'i2c' at 6236, name i2c@600 - serial0, /ahb/apb/serial@e1824200 - i2c0, /ahb/apb/flexcom@e181c000/i2c@600 Found seq 0 i2c_post_bind: i2c@600, seq=0 After this patch: Looking for 'i2c' at 4704, name i2c@600 - serial0, /ahb/apb/serial@e1824200 - i2c0, /ahb/apb/flexcom@e181c000/i2c@600 - i2c1, /ahb/apb/flexcom@e2818000/i2c@600 Found seq 1 Before the patch: => i2c bus Bus 0: i2c@600 Bus 0: i2c@600 (active 0) 52: eeprom@52, offset len 1, flags 0 53: eeprom@53, offset len 1, flags 0 => After the patch: => i2c bus Bus 0: i2c@600 Bus 1: i2c@600 (active 1) 52: eeprom@52, offset len 1, flags 0 53: eeprom@53, offset len 1, flags 0 Signed-off-by: Eugen Hristev --- configs/sama7g5ek_mmc1_defconfig | 1 + configs/sama7g5ek_mmc_defconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/configs/sama7g5ek_mmc1_defconfig b/configs/sama7g5ek_mmc1_defconfig index e2974899009..15a5c54e756 100644 --- a/configs/sama7g5ek_mmc1_defconfig +++ b/configs/sama7g5ek_mmc1_defconfig @@ -72,3 +72,4 @@ CONFIG_TIMER=y CONFIG_MCHP_PIT64B_TIMER=y CONFIG_OF_LIBFDT_OVERLAY=y # CONFIG_EFI_LOADER_HII is not set +CONFIG_PHANDLE_CHECK_SEQ=y diff --git a/configs/sama7g5ek_mmc_defconfig b/configs/sama7g5ek_mmc_defconfig index 4f68a464561..7abd5c8a38a 100644 --- a/configs/sama7g5ek_mmc_defconfig +++ b/configs/sama7g5ek_mmc_defconfig @@ -72,3 +72,4 @@ CONFIG_TIMER=y CONFIG_MCHP_PIT64B_TIMER=y CONFIG_OF_LIBFDT_OVERLAY=y # CONFIG_EFI_LOADER_HII is not set +CONFIG_PHANDLE_CHECK_SEQ=y