1*856b30daSMarek Vasut /* 2*856b30daSMarek Vasut * Copyright (C) 2012 Altera Corporation <www.altera.com> 3*856b30daSMarek Vasut * 4*856b30daSMarek Vasut * SPDX-License-Identifier: GPL-2.0+ 5*856b30daSMarek Vasut */ 6*856b30daSMarek Vasut 7*856b30daSMarek Vasut #include <common.h> 8*856b30daSMarek Vasut #include <asm/arch/reset_manager.h> 9*856b30daSMarek Vasut #include <asm/io.h> 10*856b30daSMarek Vasut 11*856b30daSMarek Vasut #include <usb.h> 12*856b30daSMarek Vasut #include <usb/s3c_udc.h> 13*856b30daSMarek Vasut #include <usb_mass_storage.h> 14*856b30daSMarek Vasut 15*856b30daSMarek Vasut #include <micrel.h> 16*856b30daSMarek Vasut #include <netdev.h> 17*856b30daSMarek Vasut #include <phy.h> 18*856b30daSMarek Vasut 19*856b30daSMarek Vasut DECLARE_GLOBAL_DATA_PTR; 20*856b30daSMarek Vasut 21*856b30daSMarek Vasut void s_init(void) {} 22*856b30daSMarek Vasut 23*856b30daSMarek Vasut /* 24*856b30daSMarek Vasut * Miscellaneous platform dependent initialisations 25*856b30daSMarek Vasut */ 26*856b30daSMarek Vasut int board_init(void) 27*856b30daSMarek Vasut { 28*856b30daSMarek Vasut /* Address of boot parameters for ATAG (if ATAG is used) */ 29*856b30daSMarek Vasut gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; 30*856b30daSMarek Vasut 31*856b30daSMarek Vasut return 0; 32*856b30daSMarek Vasut } 33*856b30daSMarek Vasut 34*856b30daSMarek Vasut /* 35*856b30daSMarek Vasut * PHY configuration 36*856b30daSMarek Vasut */ 37*856b30daSMarek Vasut #ifdef CONFIG_PHY_MICREL_KSZ9021 38*856b30daSMarek Vasut int board_phy_config(struct phy_device *phydev) 39*856b30daSMarek Vasut { 40*856b30daSMarek Vasut int ret; 41*856b30daSMarek Vasut /* 42*856b30daSMarek Vasut * These skew settings for the KSZ9021 ethernet phy is required for ethernet 43*856b30daSMarek Vasut * to work reliably on most flavors of cyclone5 boards. 44*856b30daSMarek Vasut */ 45*856b30daSMarek Vasut ret = ksz9021_phy_extended_write(phydev, 46*856b30daSMarek Vasut MII_KSZ9021_EXT_RGMII_RX_DATA_SKEW, 47*856b30daSMarek Vasut 0x0); 48*856b30daSMarek Vasut if (ret) 49*856b30daSMarek Vasut return ret; 50*856b30daSMarek Vasut 51*856b30daSMarek Vasut ret = ksz9021_phy_extended_write(phydev, 52*856b30daSMarek Vasut MII_KSZ9021_EXT_RGMII_TX_DATA_SKEW, 53*856b30daSMarek Vasut 0x0); 54*856b30daSMarek Vasut if (ret) 55*856b30daSMarek Vasut return ret; 56*856b30daSMarek Vasut 57*856b30daSMarek Vasut ret = ksz9021_phy_extended_write(phydev, 58*856b30daSMarek Vasut MII_KSZ9021_EXT_RGMII_CLOCK_SKEW, 59*856b30daSMarek Vasut 0xf0f0); 60*856b30daSMarek Vasut if (ret) 61*856b30daSMarek Vasut return ret; 62*856b30daSMarek Vasut 63*856b30daSMarek Vasut if (phydev->drv->config) 64*856b30daSMarek Vasut return phydev->drv->config(phydev); 65*856b30daSMarek Vasut 66*856b30daSMarek Vasut return 0; 67*856b30daSMarek Vasut } 68*856b30daSMarek Vasut #endif 69*856b30daSMarek Vasut 70*856b30daSMarek Vasut #ifdef CONFIG_USB_GADGET 71*856b30daSMarek Vasut struct s3c_plat_otg_data socfpga_otg_data = { 72*856b30daSMarek Vasut .regs_otg = CONFIG_USB_DWC2_REG_ADDR, 73*856b30daSMarek Vasut .usb_gusbcfg = 0x1417, 74*856b30daSMarek Vasut }; 75*856b30daSMarek Vasut 76*856b30daSMarek Vasut int board_usb_init(int index, enum usb_init_type init) 77*856b30daSMarek Vasut { 78*856b30daSMarek Vasut return s3c_udc_probe(&socfpga_otg_data); 79*856b30daSMarek Vasut } 80*856b30daSMarek Vasut 81*856b30daSMarek Vasut int g_dnl_board_usb_cable_connected(void) 82*856b30daSMarek Vasut { 83*856b30daSMarek Vasut return 1; 84*856b30daSMarek Vasut } 85*856b30daSMarek Vasut #endif 86