blob: 5ff89c45423e82a1aa1962719b49a57311ae96f7 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0
Stephen Warren1ce3d542016-05-12 13:32:56 -06002/*
3 * Copyright (c) 2016, NVIDIA CORPORATION
Stephen Warren1ce3d542016-05-12 13:32:56 -06004 */
5
6#include <common.h>
Simon Glass0af6e2d2019-08-01 09:46:52 -06007#include <env.h>
Thierry Redingf0112e42019-04-15 11:32:36 +02008#include <fdtdec.h>
Stephen Warren7f253c82016-07-29 13:15:05 -06009#include <i2c.h>
Simon Glass0f2af882020-05-10 11:40:05 -060010#include <log.h>
Simon Glass274e0b02020-05-10 11:39:56 -060011#include <net.h>
Thierry Reding4a024c22021-09-03 15:16:22 +020012#include <stdlib.h>
Thierry Reding92f9f8c2019-04-15 11:32:34 +020013#include <linux/libfdt.h>
Thierry Reding1398da62021-09-03 15:16:24 +020014#include <asm/arch-tegra/board.h>
Stephen Warren7f253c82016-07-29 13:15:05 -060015#include "../p2571/max77620_init.h"
16
Thierry Reding7cef2b22019-04-15 11:32:28 +020017void pin_mux_mmc(void)
Stephen Warren7f253c82016-07-29 13:15:05 -060018{
19 struct udevice *dev;
20 uchar val;
21 int ret;
22
23 /* Turn on MAX77620 LDO3 to 3.3V for SD card power */
24 debug("%s: Set LDO3 for VDDIO_SDMMC_AP power to 3.3V\n", __func__);
25 ret = i2c_get_chip_for_busnum(0, MAX77620_I2C_ADDR_7BIT, 1, &dev);
26 if (ret) {
27 printf("%s: Cannot find MAX77620 I2C chip\n", __func__);
Thierry Reding7cef2b22019-04-15 11:32:28 +020028 return;
Stephen Warren7f253c82016-07-29 13:15:05 -060029 }
30 /* 0xF2 for 3.3v, enabled: bit7:6 = 11 = enable, bit5:0 = voltage */
31 val = 0xF2;
32 ret = dm_i2c_write(dev, MAX77620_CNFG1_L3_REG, &val, 1);
33 if (ret) {
34 printf("i2c_write 0 0x3c 0x27 failed: %d\n", ret);
Thierry Reding7cef2b22019-04-15 11:32:28 +020035 return;
Stephen Warren7f253c82016-07-29 13:15:05 -060036 }
Stephen Warren7f253c82016-07-29 13:15:05 -060037}
Stephen Warren2f546502016-07-29 13:15:06 -060038
Thierry Reding7cef2b22019-04-15 11:32:28 +020039#ifdef CONFIG_PCI_TEGRA
Stephen Warren2f546502016-07-29 13:15:06 -060040int tegra_pcie_board_init(void)
41{
42 struct udevice *dev;
43 uchar val;
44 int ret;
45
46 /* Turn on MAX77620 LDO7 to 1.05V for PEX power */
47 debug("%s: Set LDO7 for PEX power to 1.05V\n", __func__);
48 ret = i2c_get_chip_for_busnum(0, MAX77620_I2C_ADDR_7BIT, 1, &dev);
49 if (ret) {
50 printf("%s: Cannot find MAX77620 I2C chip\n", __func__);
51 return -1;
52 }
53 /* 0xC5 for 1.05v, enabled: bit7:6 = 11 = enable, bit5:0 = voltage */
54 val = 0xC5;
55 ret = dm_i2c_write(dev, MAX77620_CNFG1_L7_REG, &val, 1);
56 if (ret)
57 printf("i2c_write 0 0x3c 0x31 failed: %d\n", ret);
58
59 return 0;
60}
Thierry Reding7cef2b22019-04-15 11:32:28 +020061#endif
Thierry Reding92f9f8c2019-04-15 11:32:34 +020062
Thierry Reding1398da62021-09-03 15:16:24 +020063static const char * const nodes[] = {
64 "/host1x@13e00000/display-hub@15200000/display@15200000",
65 "/host1x@13e00000/display-hub@15200000/display@15210000",
66 "/host1x@13e00000/display-hub@15200000/display@15220000",
67};
Thierry Redingf0112e42019-04-15 11:32:36 +020068
Masahiro Yamadaf7ed78b2020-06-26 15:13:33 +090069int ft_board_setup(void *fdt, struct bd_info *bd)
Thierry Redingf0112e42019-04-15 11:32:36 +020070{
71 ft_mac_address_setup(fdt);
Thierry Reding1398da62021-09-03 15:16:24 +020072 ft_carveout_setup(fdt, nodes, ARRAY_SIZE(nodes));
Thierry Redingf0112e42019-04-15 11:32:36 +020073
Thierry Reding92f9f8c2019-04-15 11:32:34 +020074 return 0;
75}