uboot/board/liebherr/xea/spl_xea.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * DENX M28 Boot setup
   4 *
   5 * Copyright (C) 2019 DENX Software Engineering
   6 * Lukasz Majewski, DENX Software Engineering, lukma@denx.de
   7 *
   8 * Copyright (C) 2018 DENX Software Engineering
   9 * Måns Rullgård, DENX Software Engineering, mans@mansr.com
  10 *
  11 * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
  12 * on behalf of DENX Software Engineering GmbH
  13 */
  14
  15#include <common.h>
  16#include <config.h>
  17#include <asm/io.h>
  18#include <asm/arch/iomux-mx28.h>
  19#include <asm/arch/imx-regs.h>
  20#include <asm/arch/sys_proto.h>
  21
  22#define MUX_CONFIG_LCD  (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
  23#define MUX_CONFIG_BOOT (MXS_PAD_3V3)
  24#define MUX_CONFIG_TSC  (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
  25#define MUX_CONFIG_SSP0 (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_PULLUP)
  26#define MUX_CONFIG_SSP2 (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_PULLUP)
  27#define MUX_CONFIG_ENET (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_NOPULL)
  28#define MUX_CONFIG_EMI  (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL)
  29
  30const iomux_cfg_t iomux_setup[] = {
  31        /* AUART0 IRDA */
  32        MX28_PAD_AUART0_RX__AUART0_RX,
  33        MX28_PAD_AUART0_TX__AUART0_TX,
  34
  35        /* AUART 4 RS422 */
  36        MX28_PAD_AUART0_CTS__AUART4_RX,
  37        MX28_PAD_AUART0_RTS__AUART4_TX,
  38
  39        /* USB0 */
  40        MX28_PAD_AUART1_CTS__USB0_OVERCURRENT,
  41        MX28_PAD_AUART1_RTS__USB0_ID,
  42        MX28_PAD_LCD_VSYNC__GPIO_1_28, /* PRW_On */
  43
  44        /* USB1 */
  45        MX28_PAD_PWM2__USB1_OVERCURRENT,
  46
  47        /* eMMC */
  48        MX28_PAD_SSP0_CMD__SSP0_CMD | MUX_CONFIG_SSP0,
  49        MX28_PAD_SSP0_DATA0__SSP0_D0 | MUX_CONFIG_SSP0,
  50        MX28_PAD_SSP0_DATA1__SSP0_D1 | MUX_CONFIG_SSP0,
  51        MX28_PAD_SSP0_DATA2__SSP0_D2 | MUX_CONFIG_SSP0,
  52        MX28_PAD_SSP0_DATA3__SSP0_D3 | MUX_CONFIG_SSP0,
  53        MX28_PAD_SSP0_DATA4__SSP0_D4 | MUX_CONFIG_SSP0,
  54        MX28_PAD_SSP0_DATA5__SSP0_D5 | MUX_CONFIG_SSP0,
  55        MX28_PAD_SSP0_DATA6__SSP0_D6 | MUX_CONFIG_SSP0,
  56        MX28_PAD_SSP0_DATA7__SSP0_D7 | MUX_CONFIG_SSP0,
  57        MX28_PAD_SSP0_DETECT__GPIO_2_9, /* Reset for eMMC */
  58        MX28_PAD_SSP0_SCK__SSP0_SCK | MUX_CONFIG_SSP0,
  59
  60        /* DIG Keys */
  61        MX28_PAD_GPMI_D00__GPIO_0_0,
  62        MX28_PAD_GPMI_D01__GPIO_0_1,
  63        MX28_PAD_GPMI_D02__GPIO_0_2,
  64        MX28_PAD_GPMI_D03__GPIO_0_3,
  65        MX28_PAD_GPMI_D04__GPIO_0_4,
  66        MX28_PAD_GPMI_D05__GPIO_0_5,
  67        MX28_PAD_GPMI_D06__GPIO_0_6,
  68        MX28_PAD_GPMI_D07__GPIO_0_7,
  69
  70        /* ADR_0-2 */
  71        MX28_PAD_GPMI_CE1N__GPIO_0_17,
  72        MX28_PAD_GPMI_CE2N__GPIO_0_18,
  73        MX28_PAD_GPMI_CE3N__GPIO_0_19,
  74
  75        /* Read Keys */
  76        MX28_PAD_GPMI_RDY0__GPIO_0_20,
  77
  78        /* LATCH_EN */
  79        MX28_PAD_GPMI_RDY1__GPIO_0_21,
  80
  81        /* Power off */
  82        MX28_PAD_GPMI_RDN__GPIO_0_24,
  83
  84        /* I2C1 Touch */
  85        MX28_PAD_AUART2_CTS__GPIO_3_10,
  86        MX28_PAD_AUART2_RTS__GPIO_3_11,
  87        MX28_PAD_GPMI_RDY2__GPIO_0_22, /* Touch Reset */
  88
  89        /* TIVA */
  90        MX28_PAD_AUART1_RX__SSP2_CARD_DETECT,
  91        MX28_PAD_SSP2_MISO__SSP2_D0,
  92        MX28_PAD_SSP2_MOSI__SSP2_CMD,
  93        MX28_PAD_SSP2_SCK__SSP2_SCK,
  94        MX28_PAD_SSP2_SS0__SSP2_D3,
  95        MX28_PAD_SSP2_SS1__GPIO_2_20,
  96        MX28_PAD_SSP2_SS2__GPIO_2_21,
  97
  98        /* SPI3 NOR-Flash */
  99        MX28_PAD_AUART1_TX__SSP3_CARD_DETECT,
 100        MX28_PAD_AUART2_RX__SSP3_D1,
 101        MX28_PAD_AUART2_TX__SSP3_D2,
 102        MX28_PAD_SSP3_MISO__SSP3_D0,
 103        MX28_PAD_SSP3_MOSI__SSP3_CMD,
 104        MX28_PAD_SSP3_SCK__SSP3_SCK,
 105        MX28_PAD_SSP3_SS0__SSP3_D3,
 106
 107        /* NOR-Flash CMD */
 108        MX28_PAD_LCD_RS__GPIO_1_26, /* Hold */
 109        MX28_PAD_LCD_WR_RWN__GPIO_1_25, /* write protect */
 110
 111        /* I2C0 Codec */
 112        MX28_PAD_I2C0_SCL__I2C0_SCL,
 113        MX28_PAD_I2C0_SDA__I2C0_SDA,
 114
 115        /* I2S Codec */
 116        MX28_PAD_SAIF0_BITCLK__SAIF0_BITCLK,
 117        MX28_PAD_SAIF0_LRCLK__SAIF0_LRCLK,
 118        MX28_PAD_SAIF0_MCLK__SAIF0_MCLK,
 119        MX28_PAD_SAIF0_SDATA0__SAIF0_SDATA0,
 120        MX28_PAD_SAIF1_SDATA0__SAIF1_SDATA0,
 121
 122        /* PWR-Hold */
 123        MX28_PAD_SPDIF__GPIO_3_27,
 124
 125        /* EMI */
 126        MX28_PAD_EMI_D00__EMI_DATA0 | MUX_CONFIG_EMI,
 127        MX28_PAD_EMI_D01__EMI_DATA1 | MUX_CONFIG_EMI,
 128        MX28_PAD_EMI_D02__EMI_DATA2 | MUX_CONFIG_EMI,
 129        MX28_PAD_EMI_D03__EMI_DATA3 | MUX_CONFIG_EMI,
 130        MX28_PAD_EMI_D04__EMI_DATA4 | MUX_CONFIG_EMI,
 131        MX28_PAD_EMI_D05__EMI_DATA5 | MUX_CONFIG_EMI,
 132        MX28_PAD_EMI_D06__EMI_DATA6 | MUX_CONFIG_EMI,
 133        MX28_PAD_EMI_D07__EMI_DATA7 | MUX_CONFIG_EMI,
 134        MX28_PAD_EMI_D08__EMI_DATA8 | MUX_CONFIG_EMI,
 135        MX28_PAD_EMI_D09__EMI_DATA9 | MUX_CONFIG_EMI,
 136        MX28_PAD_EMI_D10__EMI_DATA10 | MUX_CONFIG_EMI,
 137        MX28_PAD_EMI_D11__EMI_DATA11 | MUX_CONFIG_EMI,
 138        MX28_PAD_EMI_D12__EMI_DATA12 | MUX_CONFIG_EMI,
 139        MX28_PAD_EMI_D13__EMI_DATA13 | MUX_CONFIG_EMI,
 140        MX28_PAD_EMI_D14__EMI_DATA14 | MUX_CONFIG_EMI,
 141        MX28_PAD_EMI_D15__EMI_DATA15 | MUX_CONFIG_EMI,
 142        MX28_PAD_EMI_ODT0__EMI_ODT0 | MUX_CONFIG_EMI,
 143        MX28_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI,
 144        MX28_PAD_EMI_ODT1__EMI_ODT1 | MUX_CONFIG_EMI,
 145        MX28_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI,
 146        MX28_PAD_EMI_DDR_OPEN_FB__EMI_DDR_OPEN_FEEDBACK | MUX_CONFIG_EMI,
 147        MX28_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI,
 148        MX28_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI,
 149        MX28_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI,
 150        MX28_PAD_EMI_DDR_OPEN__EMI_DDR_OPEN | MUX_CONFIG_EMI,
 151
 152        MX28_PAD_EMI_A00__EMI_ADDR0 | MUX_CONFIG_EMI,
 153        MX28_PAD_EMI_A01__EMI_ADDR1 | MUX_CONFIG_EMI,
 154        MX28_PAD_EMI_A02__EMI_ADDR2 | MUX_CONFIG_EMI,
 155        MX28_PAD_EMI_A03__EMI_ADDR3 | MUX_CONFIG_EMI,
 156        MX28_PAD_EMI_A04__EMI_ADDR4 | MUX_CONFIG_EMI,
 157        MX28_PAD_EMI_A05__EMI_ADDR5 | MUX_CONFIG_EMI,
 158        MX28_PAD_EMI_A06__EMI_ADDR6 | MUX_CONFIG_EMI,
 159        MX28_PAD_EMI_A07__EMI_ADDR7 | MUX_CONFIG_EMI,
 160        MX28_PAD_EMI_A08__EMI_ADDR8 | MUX_CONFIG_EMI,
 161        MX28_PAD_EMI_A09__EMI_ADDR9 | MUX_CONFIG_EMI,
 162        MX28_PAD_EMI_A10__EMI_ADDR10 | MUX_CONFIG_EMI,
 163        MX28_PAD_EMI_A11__EMI_ADDR11 | MUX_CONFIG_EMI,
 164        MX28_PAD_EMI_A12__EMI_ADDR12 | MUX_CONFIG_EMI,
 165        MX28_PAD_EMI_A13__EMI_ADDR13 | MUX_CONFIG_EMI,
 166        MX28_PAD_EMI_A14__EMI_ADDR14 | MUX_CONFIG_EMI,
 167        MX28_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI,
 168        MX28_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI,
 169        MX28_PAD_EMI_BA2__EMI_BA2 | MUX_CONFIG_EMI,
 170        MX28_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI,
 171        MX28_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI,
 172        MX28_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI,
 173        MX28_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI,
 174        MX28_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI,
 175        MX28_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI,
 176
 177        /* Uart3 Bluetooth-Interface */
 178        MX28_PAD_AUART3_CTS__AUART3_CTS,
 179        MX28_PAD_AUART3_RTS__AUART3_RTS,
 180        MX28_PAD_AUART3_RX__AUART3_RX,
 181        MX28_PAD_AUART3_TX__AUART3_TX,
 182
 183        /* framebuffer */
 184        MX28_PAD_LCD_CS__LCD_CS | MUX_CONFIG_LCD,
 185        MX28_PAD_LCD_D00__LCD_D0 | MUX_CONFIG_LCD,
 186        MX28_PAD_LCD_D01__LCD_D1 | MUX_CONFIG_LCD,
 187        MX28_PAD_LCD_D02__LCD_D2 | MUX_CONFIG_LCD,
 188        MX28_PAD_LCD_D03__LCD_D3 | MUX_CONFIG_LCD,
 189        MX28_PAD_LCD_D04__LCD_D4 | MUX_CONFIG_LCD,
 190        MX28_PAD_LCD_D05__LCD_D5 | MUX_CONFIG_LCD,
 191        MX28_PAD_LCD_D06__LCD_D6 | MUX_CONFIG_LCD,
 192        MX28_PAD_LCD_D07__LCD_D7 | MUX_CONFIG_LCD,
 193        MX28_PAD_LCD_D08__LCD_D8 | MUX_CONFIG_LCD,
 194        MX28_PAD_LCD_D09__LCD_D9 | MUX_CONFIG_LCD,
 195        MX28_PAD_LCD_D10__LCD_D10 | MUX_CONFIG_LCD,
 196        MX28_PAD_LCD_D11__LCD_D11 | MUX_CONFIG_LCD,
 197        MX28_PAD_LCD_D12__LCD_D12 | MUX_CONFIG_LCD,
 198        MX28_PAD_LCD_D13__LCD_D13 | MUX_CONFIG_LCD,
 199        MX28_PAD_LCD_D14__LCD_D14 | MUX_CONFIG_LCD,
 200        MX28_PAD_LCD_D15__LCD_D15 | MUX_CONFIG_LCD,
 201        MX28_PAD_LCD_D16__LCD_D16 | MUX_CONFIG_LCD,
 202        MX28_PAD_LCD_D17__LCD_D17 | MUX_CONFIG_LCD,
 203        MX28_PAD_LCD_D18__LCD_D18 | MUX_CONFIG_LCD,
 204        MX28_PAD_LCD_D19__LCD_D19 | MUX_CONFIG_LCD,
 205        MX28_PAD_LCD_D20__LCD_D20 | MUX_CONFIG_LCD,
 206        MX28_PAD_LCD_D21__LCD_D21 | MUX_CONFIG_LCD,
 207        MX28_PAD_LCD_D22__LCD_D22 | MUX_CONFIG_LCD,
 208        MX28_PAD_LCD_D23__LCD_D23 | MUX_CONFIG_LCD,
 209        MX28_PAD_LCD_DOTCLK__LCD_DOTCLK | MUX_CONFIG_LCD,
 210        MX28_PAD_LCD_ENABLE__LCD_ENABLE | MUX_CONFIG_LCD,
 211        MX28_PAD_LCD_HSYNC__LCD_HSYNC | MUX_CONFIG_LCD,
 212        MX28_PAD_LCD_RD_E__LCD_VSYNC | MUX_CONFIG_LCD,
 213        MX28_PAD_LCD_RESET__LCD_RESET | MUX_CONFIG_LCD,
 214
 215        /* DUART RS232 */
 216        MX28_PAD_PWM0__DUART_RX,
 217        MX28_PAD_PWM1__DUART_TX,
 218
 219        /* FEC Ethernet */
 220        MX28_PAD_ENET_CLK__CLKCTRL_ENET | MUX_CONFIG_ENET,
 221        MX28_PAD_ENET0_COL__ENET1_TX_EN | MUX_CONFIG_ENET,
 222        MX28_PAD_ENET0_CRS__ENET1_RX_EN | MUX_CONFIG_ENET,
 223        MX28_PAD_ENET0_MDC__ENET0_MDC | MUX_CONFIG_ENET,
 224        MX28_PAD_ENET0_MDIO__ENET0_MDIO | MUX_CONFIG_ENET,
 225        MX28_PAD_ENET0_RX_CLK__GPIO_4_13, /* Phy Interrupt */
 226        MX28_PAD_ENET0_RX_EN__ENET0_RX_EN | MUX_CONFIG_ENET,
 227        MX28_PAD_ENET0_RXD0__ENET0_RXD0 | MUX_CONFIG_ENET,
 228        MX28_PAD_ENET0_RXD1__ENET0_RXD1 | MUX_CONFIG_ENET,
 229        MX28_PAD_ENET0_RXD3__ENET1_RXD1 | MUX_CONFIG_ENET,
 230        MX28_PAD_ENET0_TX_CLK__GPIO_4_5, /* n.c. */
 231        MX28_PAD_ENET0_TX_EN__ENET0_TX_EN | MUX_CONFIG_ENET,
 232        MX28_PAD_ENET0_TXD0__ENET0_TXD0 | MUX_CONFIG_ENET,
 233        MX28_PAD_ENET0_TXD1__ENET0_TXD1 | MUX_CONFIG_ENET,
 234        MX28_PAD_ENET0_TXD3__ENET1_TXD1 | MUX_CONFIG_ENET,
 235        MX28_PAD_SSP1_CMD__GPIO_2_13, /* PHY reset */
 236
 237        /* TIVA boot control */
 238        MX28_PAD_GPMI_RDY3__GPIO_0_23 | MUX_CONFIG_BOOT, /* TIVA0 */
 239        MX28_PAD_GPMI_WRN__GPIO_0_25 | MUX_CONFIG_BOOT, /* TIVA1 */
 240};
 241
 242u32 mxs_dram_vals[] = {
 243        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 244        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 245        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 246        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 247        0x00000000, 0x00000100, 0x00000000, 0x00000000,
 248        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 249        0x00000000, 0x00000000, 0x00010101, 0x01010101,
 250        0x000f0f01, 0x0f02010a, 0x00000000, 0x00010101,
 251        0x00000100, 0x00000100, 0x00000000, 0x00000002,
 252        0x01010000, 0x07080403, 0x07005303, 0x0b0000c8,
 253        0x0200a0c1, 0x0002040c, 0x0038430a, 0x04290322,
 254        0x02040203, 0x00c8002b, 0x00000000, 0x00000000,
 255        0x00012100, 0xffff0303, 0x00012100, 0xffff0303,
 256        0x00012100, 0xffff0303, 0x00012100, 0xffff0303,
 257        0x00000003, 0x00000000, 0x00000000, 0x00000000,
 258        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 259        0x00000000, 0x00000000, 0x00000612, 0x01000102,
 260        0x06120612, 0x00000200, 0x00020007, 0xf4004a27,
 261        0xf4004a27, 0xf4004a27, 0xf4004a27, 0x07400300,
 262        0x07400300, 0x07400300, 0x07400300, 0x00000005,
 263        0x00000000, 0x00000000, 0x01000000, 0x00000000,
 264        0x00000001, 0x000f1133, 0x00000000, 0x00001f04,
 265        0x00001f04, 0x00001f04, 0x00001f04, 0x00001f04,
 266        0x00001f04, 0x00001f04, 0x00001f04, 0x00000000,
 267        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 268        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 269        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 270        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 271        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 272        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 273        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 274        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 275        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 276        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 277        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 278        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 279        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 280        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 281        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 282        0x00000000, 0x00000000, 0x00000000, 0x00000000,
 283        0x00000000, 0x00000000, 0x00010000, 0x00030404,
 284        0x00000002, 0x00000000, 0x00000000, 0x00000000,
 285        0x00000000, 0x00000000, 0x00000000, 0x01010000,
 286        0x01000000, 0x03030000, 0x00010303, 0x01020202,
 287        0x00000000, 0x02040101, 0x21002103, 0x00061200,
 288        0x06120612, 0x00000642, 0x00000000, 0x00000004,
 289        0x00000000, 0x00000080, 0x00000000, 0x00000000,
 290        0x00000000, 0xffffffff
 291};
 292
 293void lowlevel_init(void)
 294{
 295        struct mxs_pinctrl_regs *pinctrl_regs =
 296                (struct mxs_pinctrl_regs *)MXS_PINCTRL_BASE;
 297
 298        /* Set EMI drive strength */
 299        writel(0x00003fff, &pinctrl_regs->hw_pinctrl_emi_ds_ctrl_clr);
 300        writel(0x00002aaa, &pinctrl_regs->hw_pinctrl_emi_ds_ctrl_set);
 301
 302        mxs_common_spl_init(0, NULL, iomux_setup, ARRAY_SIZE(iomux_setup));
 303}
 304