147f73504SPeng Fan /*
247f73504SPeng Fan * Copyright (C) 2016 Freescale Semiconductor, Inc.
347f73504SPeng Fan *
447f73504SPeng Fan * SPDX-License-Identifier: GPL-2.0+
547f73504SPeng Fan */
647f73504SPeng Fan
747f73504SPeng Fan #include <asm/arch/clock.h>
847f73504SPeng Fan #include <asm/arch/crm_regs.h>
947f73504SPeng Fan #include <asm/arch/iomux.h>
1047f73504SPeng Fan #include <asm/arch/imx-regs.h>
1147f73504SPeng Fan #include <asm/arch/mx6-pins.h>
1247f73504SPeng Fan #include <asm/arch/sys_proto.h>
1347f73504SPeng Fan #include <asm/gpio.h>
14*552a848eSStefano Babic #include <asm/mach-imx/iomux-v3.h>
15*552a848eSStefano Babic #include <asm/mach-imx/boot_mode.h>
1647f73504SPeng Fan #include <asm/io.h>
1747f73504SPeng Fan #include <common.h>
1847f73504SPeng Fan #include <linux/sizes.h>
1947f73504SPeng Fan #include <mmc.h>
2047f73504SPeng Fan #include <power/pmic.h>
2147f73504SPeng Fan #include <power/pfuze100_pmic.h>
2247f73504SPeng Fan #include "../common/pfuze.h"
2347f73504SPeng Fan
2447f73504SPeng Fan DECLARE_GLOBAL_DATA_PTR;
2547f73504SPeng Fan
2647f73504SPeng Fan #define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
2747f73504SPeng Fan PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
2847f73504SPeng Fan PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
2947f73504SPeng Fan
dram_init(void)3047f73504SPeng Fan int dram_init(void)
3147f73504SPeng Fan {
3247f73504SPeng Fan gd->ram_size = imx_ddr_size();
3347f73504SPeng Fan
3447f73504SPeng Fan return 0;
3547f73504SPeng Fan }
3647f73504SPeng Fan
3747f73504SPeng Fan static iomux_v3_cfg_t const uart1_pads[] = {
3847f73504SPeng Fan MX6_PAD_UART1_TXD__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
3947f73504SPeng Fan MX6_PAD_UART1_RXD__UART1_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
4047f73504SPeng Fan };
4147f73504SPeng Fan
4247f73504SPeng Fan static iomux_v3_cfg_t const wdog_pads[] = {
4347f73504SPeng Fan MX6_PAD_WDOG_B__WDOG1_B | MUX_PAD_CTRL(NO_PAD_CTRL),
4447f73504SPeng Fan };
4547f73504SPeng Fan
setup_iomux_uart(void)4647f73504SPeng Fan static void setup_iomux_uart(void)
4747f73504SPeng Fan {
4847f73504SPeng Fan imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
4947f73504SPeng Fan }
5047f73504SPeng Fan
5147f73504SPeng Fan #ifdef CONFIG_DM_PMIC_PFUZE100
power_init_board(void)5247f73504SPeng Fan int power_init_board(void)
5347f73504SPeng Fan {
5447f73504SPeng Fan struct udevice *dev;
5547f73504SPeng Fan int ret;
5647f73504SPeng Fan u32 dev_id, rev_id, i;
5747f73504SPeng Fan u32 switch_num = 6;
5847f73504SPeng Fan u32 offset = PFUZE100_SW1CMODE;
5947f73504SPeng Fan
6047f73504SPeng Fan ret = pmic_get("pfuze100", &dev);
6147f73504SPeng Fan if (ret == -ENODEV)
6247f73504SPeng Fan return 0;
6347f73504SPeng Fan
6447f73504SPeng Fan if (ret != 0)
6547f73504SPeng Fan return ret;
6647f73504SPeng Fan
6747f73504SPeng Fan dev_id = pmic_reg_read(dev, PFUZE100_DEVICEID);
6847f73504SPeng Fan rev_id = pmic_reg_read(dev, PFUZE100_REVID);
6947f73504SPeng Fan printf("PMIC: PFUZE100! DEV_ID=0x%x REV_ID=0x%x\n", dev_id, rev_id);
7047f73504SPeng Fan
7147f73504SPeng Fan
7247f73504SPeng Fan /* Init mode to APS_PFM */
7347f73504SPeng Fan pmic_reg_write(dev, PFUZE100_SW1ABMODE, APS_PFM);
7447f73504SPeng Fan
7547f73504SPeng Fan for (i = 0; i < switch_num - 1; i++)
7647f73504SPeng Fan pmic_reg_write(dev, offset + i * SWITCH_SIZE, APS_PFM);
7747f73504SPeng Fan
7847f73504SPeng Fan /* set SW1AB staby volatage 0.975V */
7947f73504SPeng Fan pmic_clrsetbits(dev, PFUZE100_SW1ABSTBY, 0x3f, 0x1b);
8047f73504SPeng Fan
8147f73504SPeng Fan /* set SW1AB/VDDARM step ramp up time from 16us to 4us/25mV */
8247f73504SPeng Fan pmic_clrsetbits(dev, PFUZE100_SW1ABCONF, 0xc0, 0x40);
8347f73504SPeng Fan
8447f73504SPeng Fan /* set SW1C staby volatage 0.975V */
8547f73504SPeng Fan pmic_clrsetbits(dev, PFUZE100_SW1CSTBY, 0x3f, 0x1b);
8647f73504SPeng Fan
8747f73504SPeng Fan /* set SW1C/VDDSOC step ramp up time to from 16us to 4us/25mV */
8847f73504SPeng Fan pmic_clrsetbits(dev, PFUZE100_SW1CCONF, 0xc0, 0x40);
8947f73504SPeng Fan
9047f73504SPeng Fan return 0;
9147f73504SPeng Fan }
9247f73504SPeng Fan #endif
9347f73504SPeng Fan
board_early_init_f(void)9447f73504SPeng Fan int board_early_init_f(void)
9547f73504SPeng Fan {
9647f73504SPeng Fan setup_iomux_uart();
9747f73504SPeng Fan
9847f73504SPeng Fan return 0;
9947f73504SPeng Fan }
10047f73504SPeng Fan
board_init(void)10147f73504SPeng Fan int board_init(void)
10247f73504SPeng Fan {
10347f73504SPeng Fan /* Address of boot parameters */
10447f73504SPeng Fan gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
10547f73504SPeng Fan
10647f73504SPeng Fan return 0;
10747f73504SPeng Fan }
10847f73504SPeng Fan
board_late_init(void)10947f73504SPeng Fan int board_late_init(void)
11047f73504SPeng Fan {
11147f73504SPeng Fan imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads));
11247f73504SPeng Fan
11347f73504SPeng Fan return 0;
11447f73504SPeng Fan }
11547f73504SPeng Fan
checkboard(void)11647f73504SPeng Fan int checkboard(void)
11747f73504SPeng Fan {
11847f73504SPeng Fan puts("Board: MX6SLL EVK\n");
11947f73504SPeng Fan
12047f73504SPeng Fan return 0;
12147f73504SPeng Fan }
12247f73504SPeng Fan
board_mmc_get_env_dev(int devno)12347f73504SPeng Fan int board_mmc_get_env_dev(int devno)
12447f73504SPeng Fan {
12547f73504SPeng Fan return devno;
12647f73504SPeng Fan }
12747f73504SPeng Fan
mmc_map_to_kernel_blk(int devno)12847f73504SPeng Fan int mmc_map_to_kernel_blk(int devno)
12947f73504SPeng Fan {
13047f73504SPeng Fan return devno;
13147f73504SPeng Fan }
132