1*8e535af2SMarek Vasut /*
2*8e535af2SMarek Vasut * Altera SoCFPGA common board code
3*8e535af2SMarek Vasut *
4*8e535af2SMarek Vasut * Copyright (C) 2015 Marek Vasut <marex@denx.de>
5*8e535af2SMarek Vasut *
6*8e535af2SMarek Vasut * SPDX-License-Identifier: GPL-2.0+
7*8e535af2SMarek Vasut */
8*8e535af2SMarek Vasut
9*8e535af2SMarek Vasut #include <common.h>
10*8e535af2SMarek Vasut #include <errno.h>
11*8e535af2SMarek Vasut #include <asm/arch/reset_manager.h>
12*8e535af2SMarek Vasut #include <asm/io.h>
13*8e535af2SMarek Vasut
14*8e535af2SMarek Vasut #include <usb.h>
15*8e535af2SMarek Vasut #include <usb/dwc2_udc.h>
16*8e535af2SMarek Vasut
17*8e535af2SMarek Vasut DECLARE_GLOBAL_DATA_PTR;
18*8e535af2SMarek Vasut
s_init(void)19*8e535af2SMarek Vasut void s_init(void) {}
20*8e535af2SMarek Vasut
21*8e535af2SMarek Vasut /*
22*8e535af2SMarek Vasut * Miscellaneous platform dependent initialisations
23*8e535af2SMarek Vasut */
board_init(void)24*8e535af2SMarek Vasut int board_init(void)
25*8e535af2SMarek Vasut {
26*8e535af2SMarek Vasut /* Address of boot parameters for ATAG (if ATAG is used) */
27*8e535af2SMarek Vasut gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
28*8e535af2SMarek Vasut
29*8e535af2SMarek Vasut return 0;
30*8e535af2SMarek Vasut }
31*8e535af2SMarek Vasut
32*8e535af2SMarek Vasut #ifdef CONFIG_USB_GADGET
33*8e535af2SMarek Vasut struct dwc2_plat_otg_data socfpga_otg_data = {
34*8e535af2SMarek Vasut .usb_gusbcfg = 0x1417,
35*8e535af2SMarek Vasut };
36*8e535af2SMarek Vasut
board_usb_init(int index,enum usb_init_type init)37*8e535af2SMarek Vasut int board_usb_init(int index, enum usb_init_type init)
38*8e535af2SMarek Vasut {
39*8e535af2SMarek Vasut int node[2], count;
40*8e535af2SMarek Vasut fdt_addr_t addr;
41*8e535af2SMarek Vasut
42*8e535af2SMarek Vasut count = fdtdec_find_aliases_for_id(gd->fdt_blob, "udc",
43*8e535af2SMarek Vasut COMPAT_ALTERA_SOCFPGA_DWC2USB,
44*8e535af2SMarek Vasut node, 2);
45*8e535af2SMarek Vasut if (count <= 0) /* No controller found. */
46*8e535af2SMarek Vasut return 0;
47*8e535af2SMarek Vasut
48*8e535af2SMarek Vasut addr = fdtdec_get_addr(gd->fdt_blob, node[0], "reg");
49*8e535af2SMarek Vasut if (addr == FDT_ADDR_T_NONE) {
50*8e535af2SMarek Vasut printf("UDC Controller has no 'reg' property!\n");
51*8e535af2SMarek Vasut return -EINVAL;
52*8e535af2SMarek Vasut }
53*8e535af2SMarek Vasut
54*8e535af2SMarek Vasut /* Patch the address from OF into the controller pdata. */
55*8e535af2SMarek Vasut socfpga_otg_data.regs_otg = addr;
56*8e535af2SMarek Vasut
57*8e535af2SMarek Vasut return dwc2_udc_probe(&socfpga_otg_data);
58*8e535af2SMarek Vasut }
59*8e535af2SMarek Vasut
g_dnl_board_usb_cable_connected(void)60*8e535af2SMarek Vasut int g_dnl_board_usb_cable_connected(void)
61*8e535af2SMarek Vasut {
62*8e535af2SMarek Vasut return 1;
63*8e535af2SMarek Vasut }
64*8e535af2SMarek Vasut #endif
65