blob: 8125f064cf115f332814f8994e7c465601e456e0 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Ilko Iliev8b954a92009-04-16 21:30:48 +02002/*
3 * (C) Copyright 2007-2008
Stelian Pop5ee0c7f2011-11-01 00:00:39 +01004 * Stelian Pop <stelian@popies.net>
Ilko Iliev8b954a92009-04-16 21:30:48 +02005 * Lead Tech Design <www.leadtechdesign.com>
6 * Copyright (C) 2008 Ronetix Ilko Iliev (www.ronetix.at)
7 * Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Ilko Iliev8b954a92009-04-16 21:30:48 +02008 */
9
Tom Rinidec7ea02024-05-20 13:35:03 -060010#include <config.h>
Simon Glass8e16b1e2019-12-28 10:45:05 -070011#include <init.h>
Simon Glassc3b8e3a2024-08-21 10:18:59 -060012#include <video.h>
Simon Glass3ba929a2020-10-30 21:38:53 -060013#include <asm/global_data.h>
Alexey Brodkin267d8e22014-02-26 17:47:58 +040014#include <linux/sizes.h>
Asen Dimove1002e22011-06-08 22:01:16 +000015#include <asm/io.h>
Andreas Bießmanna4c24d32013-11-29 12:13:45 +010016#include <asm/gpio.h>
Ilko Iliev8b954a92009-04-16 21:30:48 +020017#include <asm/arch/at91sam9_smc.h>
18#include <asm/arch/at91_common.h>
Ilko Iliev8b954a92009-04-16 21:30:48 +020019#include <asm/arch/at91_rstc.h>
Asen Dimove7480ad2010-04-19 14:18:43 +030020#include <asm/arch/at91_matrix.h>
Ilko Iliev8b954a92009-04-16 21:30:48 +020021#include <asm/arch/clk.h>
Asen Dimove1002e22011-06-08 22:01:16 +000022#include <asm/arch/gpio.h>
Simon Glass0ffb9d62017-05-31 19:47:48 -060023#include <asm/mach-types.h>
Ilko Iliev8b954a92009-04-16 21:30:48 +020024
25DECLARE_GLOBAL_DATA_PTR;
26
27/* ------------------------------------------------------------------------- */
28/*
Ilko Ilieva0fe3182021-04-23 15:41:34 +020029 * Miscellaneous platform dependent initializations
Ilko Iliev8b954a92009-04-16 21:30:48 +020030 */
31
32#ifdef CONFIG_CMD_NAND
33static void pm9263_nand_hw_init(void)
34{
35 unsigned long csa;
Asen Dimove1002e22011-06-08 22:01:16 +000036 struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC0;
37 struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX;
Ilko Iliev8b954a92009-04-16 21:30:48 +020038
39 /* Enable CS3 */
Asen Dimove7480ad2010-04-19 14:18:43 +030040 csa = readl(&matrix->csa[0]) | AT91_MATRIX_CSA_EBI_CS3A;
41 writel(csa, &matrix->csa[0]);
Ilko Iliev8b954a92009-04-16 21:30:48 +020042
43 /* Configure SMC CS3 for NAND/SmartMedia */
Asen Dimove7480ad2010-04-19 14:18:43 +030044 writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(1) |
45 AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(1),
46 &smc->cs[3].setup);
47
48 writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(3) |
49 AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(3),
50 &smc->cs[3].pulse);
51
52 writel(AT91_SMC_CYCLE_NWE(5) | AT91_SMC_CYCLE_NRD(5),
53 &smc->cs[3].cycle);
54
55 writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE |
56 AT91_SMC_MODE_EXNW_DISABLE |
Ilko Iliev8b954a92009-04-16 21:30:48 +020057#ifdef CONFIG_SYS_NAND_DBW_16
Asen Dimove7480ad2010-04-19 14:18:43 +030058 AT91_SMC_MODE_DBW_16 |
Ilko Iliev8b954a92009-04-16 21:30:48 +020059#else /* CONFIG_SYS_NAND_DBW_8 */
Asen Dimove7480ad2010-04-19 14:18:43 +030060 AT91_SMC_MODE_DBW_8 |
Ilko Iliev8b954a92009-04-16 21:30:48 +020061#endif
Asen Dimove7480ad2010-04-19 14:18:43 +030062 AT91_SMC_MODE_TDF_CYCLE(2),
63 &smc->cs[3].mode);
Ilko Iliev8b954a92009-04-16 21:30:48 +020064
65 /* Configure RDY/BSY */
Tom Rinib4213492022-11-12 17:36:51 -050066 gpio_direction_input(CFG_SYS_NAND_READY_PIN);
Ilko Iliev8b954a92009-04-16 21:30:48 +020067
68 /* Enable NandFlash */
Tom Rinib4213492022-11-12 17:36:51 -050069 gpio_direction_output(CFG_SYS_NAND_ENABLE_PIN, 1);
Ilko Iliev8b954a92009-04-16 21:30:48 +020070}
71#endif
72
Asen Dimovbd0f0232011-12-09 10:56:55 +000073int board_early_init_f(void)
Ilko Iliev8b954a92009-04-16 21:30:48 +020074{
Asen Dimovbd0f0232011-12-09 10:56:55 +000075 return 0;
76}
77
78int board_init(void)
79{
Ilko Ilieva0fe3182021-04-23 15:41:34 +020080 /* arch number of PM9263 Board */
Asen Dimovbd0f0232011-12-09 10:56:55 +000081 gd->bd->bi_arch_number = MACH_TYPE_PM9263;
82
Ilko Ilieva0fe3182021-04-23 15:41:34 +020083 /* address of boot parameters */
Ilko Iliev8b954a92009-04-16 21:30:48 +020084 gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
85
Ilko Iliev8b954a92009-04-16 21:30:48 +020086#ifdef CONFIG_CMD_NAND
87 pm9263_nand_hw_init();
88#endif
Ilko Iliev8b954a92009-04-16 21:30:48 +020089#ifdef CONFIG_USB_OHCI_NEW
90 at91_uhp_hw_init();
91#endif
Ilko Iliev8b954a92009-04-16 21:30:48 +020092 return 0;
93}
94
95int dram_init(void)
96{
Ilko Ilieva0fe3182021-04-23 15:41:34 +020097 /* dram_init must store complete RAM size in gd->ram_size */
Albert ARIBAUDa9606732011-07-03 05:55:33 +000098 gd->ram_size = get_ram_size((void *)PHYS_SDRAM,
Asen Dimov84ea97c2010-12-12 12:41:59 +020099 PHYS_SDRAM_SIZE);
100 return 0;
101}
102
Simon Glass2f949c32017-03-31 08:40:32 -0600103int dram_init_banksize(void)
Asen Dimov84ea97c2010-12-12 12:41:59 +0200104{
Ilko Iliev8b954a92009-04-16 21:30:48 +0200105 gd->bd->bi_dram[0].start = PHYS_SDRAM;
106 gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
Simon Glass2f949c32017-03-31 08:40:32 -0600107
108 return 0;
Ilko Iliev8b954a92009-04-16 21:30:48 +0200109}
110
Ilko Iliev8b954a92009-04-16 21:30:48 +0200111#ifdef CONFIG_DISPLAY_BOARDINFO
112int checkboard (void)
113{
Simon Glassc3b8e3a2024-08-21 10:18:59 -0600114 ulong fb_base = video_get_fb();
Ilko Iliev8b954a92009-04-16 21:30:48 +0200115 char *ss;
Ilko Iliev8b954a92009-04-16 21:30:48 +0200116
117 printf ("Board : Ronetix PM9263\n");
Ilko Iliev8b954a92009-04-16 21:30:48 +0200118
Simon Glassc3b8e3a2024-08-21 10:18:59 -0600119 switch (fb_base) {
Ilko Iliev8b954a92009-04-16 21:30:48 +0200120 case PHYS_PSRAM:
121 ss = "(PSRAM)";
122 break;
123
Asen Dimove1002e22011-06-08 22:01:16 +0000124 case ATMEL_BASE_SRAM0:
Ilko Iliev8b954a92009-04-16 21:30:48 +0200125 ss = "(Internal SRAM)";
126 break;
127
128 default:
129 ss = "";
130 break;
131 }
Simon Glassc3b8e3a2024-08-21 10:18:59 -0600132 printf("Video memory : 0x%08lX %s\n", fb_base, ss);
Ilko Iliev8b954a92009-04-16 21:30:48 +0200133
134 printf ("\n");
135 return 0;
136}
137#endif