blob: 879006f8e05623f24de7cb0dc23a8e9bf093c6bc [file] [log] [blame]
Marcel Ziswiler11e2a532014-09-05 10:18:38 +02001/*
2 * (C) Copyright 2014
3 * Marcel Ziswiler <marcel@ziswiler.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0+
6 */
7
8#include <common.h>
Marcel Ziswiler11e2a532014-09-05 10:18:38 +02009#include <asm/arch/gp_padctrl.h>
10#include <asm/arch/pinmux.h>
Marcel Ziswilerdd899d02015-08-06 00:47:00 +020011#include <asm/arch-tegra/ap.h>
12#include <asm/arch-tegra/tegra.h>
Marcel Ziswiler11e2a532014-09-05 10:18:38 +020013#include <asm/gpio.h>
Marcel Ziswilerdd899d02015-08-06 00:47:00 +020014#include <asm/io.h>
Marcel Ziswiler764d4122015-08-06 00:47:10 +020015#include <dm.h>
Marcel Ziswiler11e2a532014-09-05 10:18:38 +020016#include <i2c.h>
17#include <netdev.h>
18
19#include "pinmux-config-apalis_t30.h"
20
21#define PMU_I2C_ADDRESS 0x2D
22#define MAX_I2C_RETRY 3
23
Marcel Ziswilerdd899d02015-08-06 00:47:00 +020024int arch_misc_init(void)
25{
26 if (readl(NV_PA_BASE_SRAM + NVBOOTINFOTABLE_BOOTTYPE) ==
27 NVBOOTTYPE_RECOVERY)
28 printf("USB recovery mode\n");
29
30 return 0;
31}
32
Marcel Ziswiler11e2a532014-09-05 10:18:38 +020033/*
34 * Routine: pinmux_init
35 * Description: Do individual peripheral pinmux configs
36 */
37void pinmux_init(void)
38{
39 pinmux_config_pingrp_table(tegra3_pinmux_common,
40 ARRAY_SIZE(tegra3_pinmux_common));
41
42 pinmux_config_pingrp_table(unused_pins_lowpower,
43 ARRAY_SIZE(unused_pins_lowpower));
44
45 /* Initialize any non-default pad configs (APB_MISC_GP regs) */
46 pinmux_config_drvgrp_table(apalis_t30_padctrl,
47 ARRAY_SIZE(apalis_t30_padctrl));
48}
49
50#ifdef CONFIG_PCI_TEGRA
51int tegra_pcie_board_init(void)
52{
Simon Glass667aee92014-12-10 08:55:57 -070053 struct udevice *dev;
Marcel Ziswiler11e2a532014-09-05 10:18:38 +020054 u8 addr, data[1];
55 int err;
56
Simon Glassa2723ae2015-01-25 08:26:55 -070057 err = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, 1, &dev);
Marcel Ziswiler11e2a532014-09-05 10:18:38 +020058 if (err) {
Simon Glass667aee92014-12-10 08:55:57 -070059 debug("%s: Cannot find PMIC I2C chip\n", __func__);
Marcel Ziswiler11e2a532014-09-05 10:18:38 +020060 return err;
61 }
Marcel Ziswiler764d4122015-08-06 00:47:10 +020062
Marcel Ziswiler11e2a532014-09-05 10:18:38 +020063 /* TPS659110: VDD2_OP_REG = 1.05V */
64 data[0] = 0x27;
65 addr = 0x25;
66
Simon Glass7d722762015-01-12 18:02:07 -070067 err = dm_i2c_write(dev, addr, data, 1);
Marcel Ziswiler11e2a532014-09-05 10:18:38 +020068 if (err) {
69 debug("failed to set VDD supply\n");
70 return err;
71 }
72
73 /* TPS659110: VDD2_REG 7.5 mV/us, ACTIVE */
74 data[0] = 0x0D;
75 addr = 0x24;
76
Simon Glass7d722762015-01-12 18:02:07 -070077 err = dm_i2c_write(dev, addr, data, 1);
Marcel Ziswiler11e2a532014-09-05 10:18:38 +020078 if (err) {
79 debug("failed to enable VDD supply\n");
80 return err;
81 }
82
83 /* TPS659110: LDO6_REG = 1.1V, ACTIVE */
84 data[0] = 0x0D;
85 addr = 0x35;
86
Simon Glass7d722762015-01-12 18:02:07 -070087 err = dm_i2c_write(dev, addr, data, 1);
Marcel Ziswiler11e2a532014-09-05 10:18:38 +020088 if (err) {
89 debug("failed to set AVDD supply\n");
90 return err;
91 }
92
Marcel Ziswiler11e2a532014-09-05 10:18:38 +020093 return 0;
94}
95
96int board_eth_init(bd_t *bis)
97{
98 return pci_eth_init(bis);
99}
100#endif /* CONFIG_PCI_TEGRA */