blob: 8a58ef8f79be74a805746ff165d13e167af3ca58 [file] [log] [blame]
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* drivers/usb/gadget/aml_tiny_usbtool/usb_boot.c
*
* Copyright (C) 2020 Amlogic, Inc. All rights reserved.
*
*/
#include "usb_boot.h"
#include "usb_pcd.h"
void set_usb_phy_config(void)
{
int time_dly = 500;
usb_aml_regs_t * usb_aml_regs = (usb_aml_regs_t * )PREI_USB_PHY_REG_BASE;
usb_config_data_t config;
usb_ctrl_data_t control;
*P_RESET1_REGISTER = (1<<2);//usb reset
// select rtc 32k
config.d32 = usb_aml_regs->config;
config.b.clk_32k_alt_sel= 1;
usb_aml_regs->config = config.d32;
// select 24MHz reference
control.d32 = usb_aml_regs->ctrl;
control.b.fsel = 5;
control.b.por = 1;
usb_aml_regs->ctrl = control.d32;
_udelay(time_dly);
control.b.por = 0;
usb_aml_regs->ctrl = control.d32;
_udelay(time_dly);
}
// static const char __attribute__((aligned(4))) usb_msg[] = "enter usb boot";
int usb_boot(int timeout_type)
{
C_ROM_BOOT_DEBUG->usb_boot_cnt++;
// serial_puts( usb_msg );
set_usb_phy_config();
usb_parameter_init(timeout_type);
if (usb_pcd_init())
return 0;
while (1) {
watchdog_clear();
if (usb_pcd_irq())
break;
}
return 0;
}