driver/ddr/fsl: Add general MMDC driver and reuse common MMDC driver for ls1012a
[platform/kernel/u-boot.git] / board / freescale / ls1012ardb / ls1012ardb.c
1 /*
2  * Copyright 2016 Freescale Semiconductor, Inc.
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6
7 #include <common.h>
8 #include <i2c.h>
9 #include <asm/io.h>
10 #include <asm/arch/clock.h>
11 #include <asm/arch/fsl_serdes.h>
12 #include <asm/arch/soc.h>
13 #include <hwconfig.h>
14 #include <ahci.h>
15 #include <mmc.h>
16 #include <scsi.h>
17 #include <fsl_esdhc.h>
18 #include <environment.h>
19 #include <fsl_mmdc.h>
20 #include <netdev.h>
21
22 DECLARE_GLOBAL_DATA_PTR;
23
24 int checkboard(void)
25 {
26         u8 in1;
27
28         puts("Board: LS1012ARDB ");
29
30         /* Initialize i2c early for Serial flash bank information */
31         i2c_set_bus_num(0);
32
33         if (i2c_read(I2C_MUX_IO1_ADDR, 1, 1, &in1, 1) < 0) {
34                 printf("Error reading i2c boot information!\n");
35                 return 0; /* Don't want to hang() on this error */
36         }
37
38         puts("Version");
39         if ((in1 & (~__SW_REV_MASK)) == __SW_REV_A)
40                 puts(": RevA");
41         else if ((in1 & (~__SW_REV_MASK)) == __SW_REV_B)
42                 puts(": RevB");
43         else
44                 puts(": unknown");
45
46         printf(", boot from QSPI");
47         if ((in1 & (~__SW_BOOT_MASK)) == __SW_BOOT_EMU)
48                 puts(": emu\n");
49         else if ((in1 & (~__SW_BOOT_MASK)) == __SW_BOOT_BANK1)
50                 puts(": bank1\n");
51         else if ((in1 & (~__SW_BOOT_MASK)) == __SW_BOOT_BANK2)
52                 puts(": bank2\n");
53         else
54                 puts("unknown\n");
55
56         return 0;
57 }
58
59 int dram_init(void)
60 {
61         mmdc_init();
62
63         gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
64
65         return 0;
66 }
67
68 int board_eth_init(bd_t *bis)
69 {
70         return pci_eth_init(bis);
71 }
72
73 int board_early_init_f(void)
74 {
75         fsl_lsch2_early_init_f();
76
77         return 0;
78 }
79
80 int board_init(void)
81 {
82         struct ccsr_cci400 *cci = (struct ccsr_cci400 *)CONFIG_SYS_CCI400_ADDR;
83         /*
84          * Set CCI-400 control override register to enable barrier
85          * transaction
86          */
87         out_le32(&cci->ctrl_ord, CCI400_CTRLORD_EN_BARRIER);
88
89 #ifdef CONFIG_SYS_FSL_ERRATUM_A010315
90         erratum_a010315();
91 #endif
92
93 #ifdef CONFIG_ENV_IS_NOWHERE
94         gd->env_addr = (ulong)&default_environment[0];
95 #endif
96
97         return 0;
98 }
99
100 int ft_board_setup(void *blob, bd_t *bd)
101 {
102         arch_fixup_fdt(blob);
103
104         ft_cpu_setup(blob, bd);
105
106         return 0;
107 }