ARM: atmel: sama5d3xek: enable NOR flash support
cover ARM: atmel: sama5d3xek: enable NOR flash support
Add NOR flash support on sama5d3xek board. Then, we can use NOR flash related command to access it.
Bo Shen (2):
ARM: atmel: sama5d3xek: add nor flash init function
ARM: atmel: sama5d3xek: enable NOR flash support
board/atmel/sama5d3xek/sama5d3xek.c | 58 +++++++++++++++++++++++++++++++++++++ include/configs/sama5d3xek.h | 12 +++++++- 2 files changed, 69 insertions(+), 1 deletion(-)
Signature · 1 line
1.8.5.2
PATCH 1/2 ARM: atmel: sama5d3xek: add nor flash init function
Add NOR flash hardware init function, including SMC and PIO configuration.
--- board/atmel/sama5d3xek/sama5d3xek.c | 58 +++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+)
board/atmel/sama5d3xek/sama5d3xek.c +58 -0
@@ -67,6 +67,61 @@ void sama5d3xek_nand_hw_init(void) }#endif +#ifndef CONFIG_SYS_NO_FLASH +void sama5d3xek_nor_hw_init (void ) +{ +struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC ; + +at91_periph_clk_enable (ATMEL_ID_SMC ); + +/* Configure SMC CS0 for NOR flash */ +writel (AT91_SMC_SETUP_NWE (1 ) |AT91_SMC_SETUP_NCS_WR (0 ) | +AT91_SMC_SETUP_NRD (2 ) |AT91_SMC_SETUP_NCS_RD (0 ), + &smc->cs[0 ].setup); +writel (AT91_SMC_PULSE_NWE (10 ) |AT91_SMC_PULSE_NCS_WR (11 ) | +AT91_SMC_PULSE_NRD (10 ) |AT91_SMC_PULSE_NCS_RD (11 ), + &smc->cs[0 ].pulse); +writel (AT91_SMC_CYCLE_NWE (11 ) |AT91_SMC_CYCLE_NRD (14 ), + &smc->cs[0 ].cycle); +writel (AT91_SMC_TIMINGS_TCLR (0 ) |AT91_SMC_TIMINGS_TADL (0 ) | +AT91_SMC_TIMINGS_TAR (0 ) |AT91_SMC_TIMINGS_TRR (0 ) | +AT91_SMC_TIMINGS_TWB (0 ) |AT91_SMC_TIMINGS_RBNSEL (0 )| +AT91_SMC_TIMINGS_NFSEL (0 ), &smc->cs[0 ].timings); +writel (AT91_SMC_MODE_RM_NRD |AT91_SMC_MODE_WM_NWE | +AT91_SMC_MODE_EXNW_DISABLE | +AT91_SMC_MODE_DBW_16 | +AT91_SMC_MODE_TDF_CYCLE (1 ), + &smc->cs[0 ].mode); + +/* Address pin (A1 ~ A23) configuration */ +at91_set_a_periph (AT91_PIO_PORTE ,1 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,2 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,3 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,4 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,5 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,6 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,7 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,8 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,9 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,10 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,11 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,12 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,13 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,14 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,15 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,16 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,17 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,18 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,19 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,20 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,21 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,22 ,0 ); +at91_set_a_periph (AT91_PIO_PORTE ,23 ,0 ); +/* CS0 pin configuration */ +at91_set_a_periph (AT91_PIO_PORTE ,26 ,0 ); +} +#endif +#ifdef CONFIG_CMD_USB static void sama5d3xek_usb_hw_init (void ) {
@@ -181,6 +236,9 @@ int board_init(void)#ifdef CONFIG_NAND_ATMEL sama5d3xek_nand_hw_init ();#endif +#ifndef CONFIG_SYS_NO_FLASH +sama5d3xek_nor_hw_init (); +#endif #ifdef CONFIG_CMD_USB sama5d3xek_usb_hw_init ();#endif
Signature · 1 line
1.8.5.2
PATCH 2/2 ARM: atmel: sama5d3xek: enable NOR flash support
In reply to Bo Shen--- include/configs/sama5d3xek.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
include/configs/sama5d3xek.h +11 -1
@@ -79,8 +79,18 @@#define CONFIG_BOOTP_GATEWAY #define CONFIG_BOOTP_HOSTNAME -/* No NOR flash */ +/* NOR flash */ +#define CONFIG_CMD_FLASH + +#ifdef CONFIG_CMD_FLASH +#define CONFIG_SYS_FLASH_CFI +#define CONFIG_FLASH_CFI_DRIVER +#define CONFIG_SYS_FLASH_BASE 0x10000000 +#define CONFIG_SYS_MAX_FLASH_SECT 0x20000 +#define CONFIG_SYS_MAX_FLASH_BANKS 1 +#else #define CONFIG_SYS_NO_FLASH +#endif /* * Command line configuration.
Signature · 1 line
1.8.5.2
PATCH 2/2 ARM: atmel: sama5d3xek: enable NOR flash support
Hi Bo,
include/configs/sama5d3xek.h line 93
Quoted 13 lines
include/configs/sama5d3xek.h +11
-1-/* No NOR flash */ +/* NOR flash */ +#define CONFIG_CMD_FLASH + +#ifdef CONFIG_CMD_FLASH +#define CONFIG_SYS_FLASH_CFI +#define CONFIG_FLASH_CFI_DRIVER +#define CONFIG_SYS_FLASH_BASE 0x10000000 +#define CONFIG_SYS_MAX_FLASH_SECT 0x20000 +#define CONFIG_SYS_MAX_FLASH_BANKS 1 +#else #define CONFIG_SYS_NO_FLASH +#endif
The NOR flash device on the SAMA5D3x CPU modules supports hardware sector protection and according to the flash datasheet: "All blocks power-up in a locked state to protect array data from being altered during power transitions". In order to make your patch set work:
#define CONFIG_SYS_FLASH_PROTECTION
needs adding into the include/configs/sama5d3xek.h file.
Andy.
PATCH 2/2 ARM: atmel: sama5d3xek: enable NOR flash support
Hi Andy,
Quoted 21 lines · Andy Pont
Hi Bo,
include/configs/sama5d3xek.h line 93
Quoted 13 lines
include/configs/sama5d3xek.h +11
-1-/* No NOR flash */ +/* NOR flash */ +#define CONFIG_CMD_FLASH + +#ifdef CONFIG_CMD_FLASH +#define CONFIG_SYS_FLASH_CFI +#define CONFIG_FLASH_CFI_DRIVER +#define CONFIG_SYS_FLASH_BASE 0x10000000 +#define CONFIG_SYS_MAX_FLASH_SECT 0x20000 +#define CONFIG_SYS_MAX_FLASH_BANKS 1 +#else #define CONFIG_SYS_NO_FLASH +#endif The NOR flash device on the SAMA5D3x CPU modules supports hardware sector protection and according to the flash datasheet: "All blocks power-up in a locked state to protect array data from being altered during power transitions". In order to make your patch set work:
Quoted 3 lines
#define
CONFIG_SYS_FLASH_PROTECTIONneeds adding into the
include/configs/sama5d3xek.hfile.
Thanks for your information.
I will add it into next version.
Thanks again.
Quoted 2 lines
Andy.
Best Regards,
Bo Shen
PATCH 2/2 ARM: atmel: sama5d3xek: enable NOR flash support
Hi Bo,
Quoted 5 lines
Quoted 5 lines
include/configs/sama5d3xek.h line 89
Quoted 5 lines
include/configs/sama5d3xek.h +5
-0+#ifdef CONFIG_CMD_FLASH +#define CONFIG_SYS_FLASH_CFI +#define CONFIG_FLASH_CFI_DRIVER +#define CONFIG_SYS_FLASH_BASE 0x10000000 +#define CONFIG_SYS_MAX_FLASH_SECT 0x20000
Is this the correct value for CONFIG_SYS_MAX_FLASH_SECT? Shouldn't it be 127 (if we ignore the top boot block) or 131 if they are included?
Regards,
Andy.
PATCH 2/2 ARM: atmel: sama5d3xek: enable NOR flash support
Hi Andy,
Quoted 10 lines · Andy Pont
Hi Bo,
Quoted 5 lines
Quoted 5 lines
include/configs/sama5d3xek.h line 89
Quoted 5 lines
include/configs/sama5d3xek.h +5
-0+#ifdef CONFIG_CMD_FLASH +#define CONFIG_SYS_FLASH_CFI +#define CONFIG_FLASH_CFI_DRIVER +#define CONFIG_SYS_FLASH_BASE 0x10000000 +#define CONFIG_SYS_MAX_FLASH_SECT 0x20000Is this the correct value for
CONFIG_SYS_MAX_FLASH_SECT? Shouldn't it be 127 (if we ignore the top boot block) or 131 if they are included?
oops, I fill this with the sector size.
Thanks point it out. Here, I think we should fill with 131.
Quoted 4 lines
Regards,
Andy.
Best Regards,
Bo Shen