1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * (C) Copyright 2015 Rockchip Electronics Co., Ltd 4 */ 5 6 #include <common.h> 7 #include <clk.h> 8 #include <dm.h> 9 #include <ram.h> 10 #include <asm/io.h> 11 #include <asm/arch/clock.h> 12 #include <asm/arch/periph.h> 13 #include <asm/arch/grf_rk3036.h> 14 #include <asm/arch/boot_mode.h> 15 #include <asm/arch/sdram_rk3036.h> 16 #include <asm/gpio.h> 17 #include <dm/pinctrl.h> 18 19 DECLARE_GLOBAL_DATA_PTR; 20 21 __weak int rk_board_late_init(void) 22 { 23 return 0; 24 } 25 26 int board_late_init(void) 27 { 28 setup_boot_mode(); 29 30 return rk_board_late_init(); 31 } 32 33 int board_init(void) 34 { 35 return 0; 36 } 37 38 #if !CONFIG_IS_ENABLED(RAM) 39 /* 40 * When CONFIG_RAM is enabled, the dram_init() function is implemented 41 * in sdram_common.c. 42 */ 43 int dram_init(void) 44 { 45 gd->ram_size = sdram_size(); 46 47 return 0; 48 } 49 #endif 50 51 #ifndef CONFIG_SYS_DCACHE_OFF 52 void enable_caches(void) 53 { 54 /* Enable D-cache. I-cache is already enabled in start.S */ 55 dcache_enable(); 56 } 57 #endif 58 59 #if defined(CONFIG_USB_GADGET) && defined(CONFIG_USB_GADGET_DWC2_OTG) 60 #include <usb.h> 61 #include <usb/dwc2_udc.h> 62 63 static struct dwc2_plat_otg_data rk3036_otg_data = { 64 .rx_fifo_sz = 512, 65 .np_tx_fifo_sz = 16, 66 .tx_fifo_sz = 128, 67 }; 68 69 int board_usb_init(int index, enum usb_init_type init) 70 { 71 int node; 72 const char *mode; 73 bool matched = false; 74 const void *blob = gd->fdt_blob; 75 76 /* find the usb_otg node */ 77 node = fdt_node_offset_by_compatible(blob, -1, 78 "rockchip,rk3288-usb"); 79 80 while (node > 0) { 81 mode = fdt_getprop(blob, node, "dr_mode", NULL); 82 if (mode && strcmp(mode, "otg") == 0) { 83 matched = true; 84 break; 85 } 86 87 node = fdt_node_offset_by_compatible(blob, node, 88 "rockchip,rk3288-usb"); 89 } 90 if (!matched) { 91 debug("Not found usb_otg device\n"); 92 return -ENODEV; 93 } 94 rk3036_otg_data.regs_otg = fdtdec_get_addr(blob, node, "reg"); 95 96 return dwc2_udc_probe(&rk3036_otg_data); 97 } 98 99 int board_usb_cleanup(int index, enum usb_init_type init) 100 { 101 return 0; 102 } 103 #endif 104