mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 11:21:23 +00:00
usb: Add XUSB support mainly for T210B01
This commit is contained in:
parent
2424ecc4f0
commit
a1188505e8
10 changed files with 2195 additions and 11 deletions
|
@ -20,9 +20,16 @@
|
|||
//#define IPL_STACK_TOP 0x4003FF00
|
||||
/* --- BIT/BCT: 0x40000000 - 0x40003000 --- */
|
||||
/* --- IPL: 0x40008000 - 0x40028000 --- */
|
||||
#define LDR_LOAD_ADDR 0x40007000
|
||||
|
||||
#define IPL_LOAD_ADDR 0x40008000
|
||||
#define IPL_SZ_MAX 0x20000 // 128KB.
|
||||
//#define IRAM_LIB_ADDR 0x4002B000
|
||||
|
||||
/* --- XUSB EP context and TRB ring buffers --- */
|
||||
#define XUSB_RING_ADDR 0x40020000
|
||||
|
||||
#define SECMON_MIN_START 0x4002B000
|
||||
|
||||
#define SDRAM_PARAMS_ADDR 0x40030000 // SDRAM extraction buffer during sdram init.
|
||||
#define CBFS_DRAM_EN_ADDR 0x4003e000 // u32.
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@
|
|||
#define CLK_RST_CONTROLLER_PLLA_MISC1 0xB8
|
||||
#define CLK_RST_CONTROLLER_PLLA_MISC 0xBC
|
||||
#define CLK_RST_CONTROLLER_PLLU_BASE 0xC0
|
||||
#define CLK_RST_CONTROLLER_PLLU_OUTA 0xC4
|
||||
#define CLK_RST_CONTROLLER_PLLU_MISC 0xCC
|
||||
#define CLK_RST_CONTROLLER_PLLD_BASE 0xD0
|
||||
#define CLK_RST_CONTROLLER_PLLD_MISC1 0xD8
|
||||
|
@ -131,6 +132,7 @@
|
|||
#define CLK_RST_CONTROLLER_UTMIP_PLL_CFG2 0x488
|
||||
#define CLK_RST_CONTROLLER_PLLE_AUX 0x48C
|
||||
#define CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S0 0x4A0
|
||||
#define CLK_RST_CONTROLLER_UTMIP_PLL_CFG3 0x4C0
|
||||
#define CLK_RST_CONTROLLER_PLLX_MISC_3 0x518
|
||||
#define CLK_RST_CONTROLLER_UTMIPLL_HW_PWRDN_CFG0 0x52C
|
||||
#define CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRE 0x554
|
||||
|
@ -140,6 +142,9 @@
|
|||
#define CLK_RST_CONTROLLER_PLLC_MISC_2 0x5D0
|
||||
#define CLK_RST_CONTROLLER_PLLC4_OUT 0x5E4
|
||||
#define CLK_RST_CONTROLLER_PLLMB_BASE 0x5E8
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_FS 0x608
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_CORE_DEV 0x60C
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_SS 0x610
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_DSIA_LP 0x620
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_I2C6 0x65C
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_EMC_DLL 0x664
|
||||
|
|
|
@ -61,6 +61,9 @@
|
|||
#define EMC_BASE 0x7001B000
|
||||
#define EMC0_BASE 0x7001E000
|
||||
#define EMC1_BASE 0x7001F000
|
||||
#define XUSB_HOST_BASE 0x70090000
|
||||
#define XUSB_PADCTL_BASE 0x7009F000
|
||||
#define XUSB_DEV_BASE 0x700D0000
|
||||
#define MIPI_CAL_BASE 0x700E3000
|
||||
#define CL_DVFS_BASE 0x70110000
|
||||
#define I2S_BASE 0x702D1000
|
||||
|
@ -109,6 +112,12 @@
|
|||
#define EMC(off) _REG(EMC_BASE, off)
|
||||
#define EMC_CH0(off) _REG(EMC0_BASE, off)
|
||||
#define EMC_CH1(off) _REG(EMC1_BASE, off)
|
||||
#define XUSB_HOST(off) _REG(XUSB_HOST_BASE, off)
|
||||
#define XUSB_PADCTL(off) _REG(XUSB_PADCTL_BASE, off)
|
||||
#define XUSB_DEV(off) _REG(XUSB_DEV_BASE, off)
|
||||
#define XUSB_DEV_XHCI(off) _REG(XUSB_DEV_BASE, off)
|
||||
#define XUSB_DEV_PCI(off) _REG(XUSB_DEV_BASE + 0x8000, off)
|
||||
#define XUSB_DEV_DEV(off) _REG(XUSB_DEV_BASE + 0x9000, off)
|
||||
#define MIPI_CAL(off) _REG(MIPI_CAL_BASE, off)
|
||||
#define CL_DVFS(off) _REG(CL_DVFS_BASE, off)
|
||||
#define I2S(off) _REG(I2S_BASE, off)
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
#include <gfx_utils.h>
|
||||
#include <input/joycon.h>
|
||||
#include <input/touch.h>
|
||||
#include <soc/hw_init.h>
|
||||
#include <soc/t210.h>
|
||||
#include <utils/util.h>
|
||||
|
||||
#include <memory_map.h>
|
||||
|
@ -352,7 +354,11 @@ int usb_device_gadget_hid(usb_ctxt_t *usbs)
|
|||
u32 polling_time;
|
||||
|
||||
// Get USB Controller ops.
|
||||
if (hw_get_chip_id() == GP_HIDREV_MAJOR_T210)
|
||||
usb_device_get_ops(&usb_ops);
|
||||
else
|
||||
xusb_device_get_ops(&usb_ops);
|
||||
|
||||
if (usbs->type == USB_HID_GAMEPAD)
|
||||
{
|
||||
polling_time = 8000;
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
|
||||
#include <usb/usbd.h>
|
||||
#include <gfx_utils.h>
|
||||
#include <soc/hw_init.h>
|
||||
#include <soc/t210.h>
|
||||
#include <storage/nx_sd.h>
|
||||
#include <storage/sdmmc.h>
|
||||
#include <storage/sdmmc_driver.h>
|
||||
|
@ -1780,7 +1782,11 @@ int usb_device_gadget_ums(usb_ctxt_t *usbs)
|
|||
usbd_gadget_ums_t ums = {0};
|
||||
|
||||
// Get USB Controller ops.
|
||||
if (hw_get_chip_id() == GP_HIDREV_MAJOR_T210)
|
||||
usb_device_get_ops(&usb_ops);
|
||||
else
|
||||
xusb_device_get_ops(&usb_ops);
|
||||
|
||||
usbs->set_text(usbs->label, "#C7EA46 Status:# Started USB");
|
||||
|
||||
if (usb_ops.usb_device_init())
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Enhanced USB (EHCI) device driver for Tegra X1
|
||||
* Enhanced & eXtensible USB device (EDCI & XDCI) driver for Tegra X1
|
||||
*
|
||||
* Copyright (c) 2019-2020 CTCaer
|
||||
*
|
||||
|
@ -21,6 +21,8 @@
|
|||
|
||||
#include <utils/types.h>
|
||||
|
||||
/* EHCI USB */
|
||||
|
||||
/* General USB registers */
|
||||
#define USB1_IF_USB_SUSP_CTRL 0x400
|
||||
#define SUSP_CTRL_USB_WAKE_ON_CNNT_EN_DEV BIT(3)
|
||||
|
@ -172,4 +174,119 @@ typedef struct _t210_usb2d_t
|
|||
vu32 endptctrl[16];
|
||||
} t210_usb2d_t;
|
||||
|
||||
|
||||
/* XHCI USB */
|
||||
|
||||
/* XUSB DEV XHCI registers */
|
||||
#define XUSB_DEV_XHCI_DB 0x4
|
||||
#define XUSB_DEV_XHCI_ERSTSZ 0x8
|
||||
#define XUSB_DEV_XHCI_ERST0BALO 0x10
|
||||
#define XUSB_DEV_XHCI_ERST0BAHI 0x14
|
||||
#define XUSB_DEV_XHCI_ERST1BALO 0x18
|
||||
#define XUSB_DEV_XHCI_ERST1BAHI 0x1C
|
||||
#define XUSB_DEV_XHCI_ERDPLO 0x20
|
||||
#define XHCI_ERDPLO_EHB BIT(3)
|
||||
#define XUSB_DEV_XHCI_ERDPHI 0x24
|
||||
#define XUSB_DEV_XHCI_EREPLO 0x28
|
||||
#define XCHI_ECS BIT(0)
|
||||
#define XUSB_DEV_XHCI_EREPHI 0x2C
|
||||
#define XUSB_DEV_XHCI_CTRL 0x30
|
||||
#define XHCI_CTRL_RUN BIT(0)
|
||||
#define XHCI_CTRL_LSE BIT(1)
|
||||
#define XHCI_CTRL_IE BIT(4)
|
||||
#define XHCI_CTRL_ENABLE BIT(31)
|
||||
#define XUSB_DEV_XHCI_ST 0x34
|
||||
#define XHCI_ST_RC BIT(0)
|
||||
#define XHCI_ST_IP BIT(4)
|
||||
#define XUSB_DEV_XHCI_PORTSC 0x3C
|
||||
#define XHCI_PORTSC_PR BIT(4)
|
||||
#define XHCI_PORTSC_PLS_MASK (0xF << 5)
|
||||
#define XHCI_PORTSC_PLS_U0 (0 << 5)
|
||||
#define XHCI_PORTSC_PLS_U1 (1 << 5)
|
||||
#define XHCI_PORTSC_PLS_U2 (2 << 5)
|
||||
#define XHCI_PORTSC_PLS_U3 (3 << 5)
|
||||
#define XHCI_PORTSC_PLS_DISABLED (4 << 5)
|
||||
#define XHCI_PORTSC_PLS_RXDETECT (5 << 5)
|
||||
#define XHCI_PORTSC_PLS_INACTIVE (6 << 5)
|
||||
#define XHCI_PORTSC_PLS_POLLING (7 << 5)
|
||||
#define XHCI_PORTSC_PLS_RECOVERY (8 << 5)
|
||||
#define XHCI_PORTSC_PLS_HOTRESET (9 << 5)
|
||||
#define XHCI_PORTSC_PLS_COMPLIANCE (10 << 5)
|
||||
#define XHCI_PORTSC_PLS_LOOPBACK (11 << 5)
|
||||
#define XHCI_PORTSC_PLS_RESUME (15 << 5)
|
||||
#define XHCI_PORTSC_PS (0xF << 10)
|
||||
#define XHCI_PORTSC_LWS BIT(16)
|
||||
#define XHCI_PORTSC_CSC BIT(17)
|
||||
#define XHCI_PORTSC_WRC BIT(19)
|
||||
#define XHCI_PORTSC_PRC BIT(21)
|
||||
#define XHCI_PORTSC_PLC BIT(22)
|
||||
#define XHCI_PORTSC_CEC BIT(23)
|
||||
#define XHCI_PORTSC_WPR BIT(30)
|
||||
#define XUSB_DEV_XHCI_ECPLO 0x40
|
||||
#define XUSB_DEV_XHCI_ECPHI 0x44
|
||||
#define XUSB_DEV_XHCI_EP_HALT 0x50
|
||||
#define XHCI_EP_HALT_DCI BIT(0)
|
||||
#define XUSB_DEV_XHCI_EP_PAUSE 0x54
|
||||
#define XUSB_DEV_XHCI_EP_RELOAD 0x58
|
||||
#define XUSB_DEV_XHCI_EP_STCHG 0x5C
|
||||
#define XUSB_DEV_XHCI_PORTHALT 0x6C
|
||||
#define XHCI_PORTHALT_HALT_LTSSM BIT(0)
|
||||
#define XHCI_PORTHALT_STCHG_REQ BIT(20)
|
||||
#define XUSB_DEV_XHCI_CFG_DEV_FE 0x85C
|
||||
#define XHCI_CFG_DEV_FE_PORTREGSEL_MASK (3 << 0)
|
||||
#define XHCI_CFG_DEV_FE_PORTREGSEL_SS (1 << 0)
|
||||
#define XHCI_CFG_DEV_FE_PORTREGSEL_HSFS (2 << 0)
|
||||
|
||||
/* XUSB DEV PCI registers */
|
||||
#define XUSB_CFG_1 0x4
|
||||
#define CFG_1_IO_SPACE BIT(0)
|
||||
#define CFG_1_MEMORY_SPACE BIT(1)
|
||||
#define CFG_1_BUS_MASTER BIT(2)
|
||||
#define XUSB_CFG_4 0x10
|
||||
#define CFG_4_ADDRESS_TYPE_32_BIT (0 << 1)
|
||||
#define CFG_4_ADDRESS_TYPE_64_BIT (2 << 1)
|
||||
|
||||
/* XUSB DEV Device registers */
|
||||
#define XUSB_DEV_CONFIGURATION 0x180
|
||||
#define DEV_CONFIGURATION_EN_FPCI BIT(0)
|
||||
#define XUSB_DEV_INTR_MASK 0x188
|
||||
#define DEV_INTR_MASK_IP_INT_MASK BIT(16)
|
||||
|
||||
/* XUSB Pad Control registers */
|
||||
#define XUSB_PADCTL_USB2_PAD_MUX 0x4
|
||||
#define PADCTL_USB2_PAD_MUX_USB2_OTG_PAD_PORT0_USB2 (0 << 0)
|
||||
#define PADCTL_USB2_PAD_MUX_USB2_OTG_PAD_PORT0_XUSB (1 << 0)
|
||||
#define PADCTL_USB2_PAD_MUX_USB2_OTG_PAD_PORT0_MASK (3 << 0)
|
||||
#define PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_USB2 (0 << 18)
|
||||
#define PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_XUSB (1 << 18)
|
||||
#define PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_MASK (3 << 18)
|
||||
#define XUSB_PADCTL_USB2_PORT_CAP 0x8
|
||||
#define PADCTL_USB2_PORT_CAP_PORT_0_CAP_DIS (0 << 0)
|
||||
#define PADCTL_USB2_PORT_CAP_PORT_0_CAP_HOST (1 << 0)
|
||||
#define PADCTL_USB2_PORT_CAP_PORT_0_CAP_DEV (2 << 0)
|
||||
#define PADCTL_USB2_PORT_CAP_PORT_0_CAP_OTG (3 << 0)
|
||||
#define PADCTL_USB2_PORT_CAP_PORT_0_CAP_MASK (3 << 0)
|
||||
#define XUSB_PADCTL_SS_PORT_MAP 0x14
|
||||
#define PADCTL_SS_PORT_MAP_PORT0_MASK (0xF << 0)
|
||||
#define XUSB_PADCTL_ELPG_PROGRAM_0 0x20
|
||||
#define XUSB_PADCTL_ELPG_PROGRAM_1 0x24
|
||||
#define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD0_CTL0 0x80
|
||||
#define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD0_CTL1 0x84
|
||||
#define XUSB_PADCTL_USB2_OTG_PAD0_CTL_0 0x88
|
||||
#define XUSB_PADCTL_USB2_OTG_PAD0_CTL_1 0x8C
|
||||
#define XUSB_PADCTL_USB2_BIAS_PAD_CTL_0 0x284
|
||||
#define XUSB_PADCTL_USB2_BIAS_PAD_CTL_1 0x288
|
||||
#define XUSB_PADCTL_USB2_VBUS_ID 0xC60
|
||||
#define PADCTL_USB2_VBUS_ID_VBUS_OVR_EN (1 << 12)
|
||||
#define PADCTL_USB2_VBUS_ID_VBUS_OVR_MASK (3 << 12)
|
||||
#define PADCTL_USB2_VBUS_ID_VBUS_ON BIT(14)
|
||||
#define PADCTL_USB2_VBUS_ID_SRC_ID_OVR_EN (1 << 16)
|
||||
#define PADCTL_USB2_VBUS_ID_SRC_MASK (3 << 16)
|
||||
#define PADCTL_USB2_VBUS_ID_OVR_GND (0 << 18)
|
||||
#define PADCTL_USB2_VBUS_ID_OVR_C (1 << 18)
|
||||
#define PADCTL_USB2_VBUS_ID_OVR_B (2 << 18)
|
||||
#define PADCTL_USB2_VBUS_ID_OVR_A (4 << 18)
|
||||
#define PADCTL_USB2_VBUS_ID_OVR_FLOAT (8 << 18)
|
||||
#define PADCTL_USB2_VBUS_ID_OVR_MASK (0xF << 18)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -988,6 +988,7 @@ static void _usbd_handle_get_descriptor(bool *transmit_data, void **descriptor,
|
|||
case USB_DESCRIPTOR_DEVICE_QUALIFIER:
|
||||
if (!usbd_otg->desc->dev_qual)
|
||||
goto exit;
|
||||
usbd_otg->desc->dev_qual->bNumOtherConfigs = 1;
|
||||
*descriptor = usbd_otg->desc->dev_qual;
|
||||
*size = usbd_otg->desc->dev_qual->bLength;
|
||||
*transmit_data = true;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Enhanced USB Device (EDCI) driver for Tegra X1
|
||||
* Enhanced & eXtensible USB Device (EDCI & XDCI) driver for Tegra X1
|
||||
*
|
||||
* Copyright (c) 2019 CTCaer
|
||||
*
|
||||
|
@ -53,8 +53,12 @@ typedef enum {
|
|||
|
||||
typedef enum
|
||||
{
|
||||
XUSB_EP_CTRL_IN = 0, // EP0.
|
||||
XUSB_EP_CTRL_OUT = 1, // EP0.
|
||||
|
||||
USB_EP_CTRL_OUT = 0, // EP0.
|
||||
USB_EP_CTRL_IN = 1, // EP0.
|
||||
|
||||
USB_EP_BULK_OUT = 2, // EP1.
|
||||
USB_EP_BULK_IN = 3, // EP1.
|
||||
USB_EP_ALL = 0xFFFFFFFF
|
||||
|
@ -136,6 +140,13 @@ typedef enum _usb_error_t
|
|||
|
||||
USB2_ERROR_XFER_EP_DISABLED = 28,
|
||||
USB2_ERROR_XFER_NOT_ALIGNED = 29,
|
||||
|
||||
XUSB_ERROR_INVALID_EP = USB_ERROR_XFER_ERROR, // From 2.
|
||||
XUSB_ERROR_XFER_BULK_IN_RESIDUE = 7,
|
||||
XUSB_ERROR_INVALID_CYCLE = USB2_ERROR_XFER_EP_DISABLED, // From 8.
|
||||
XUSB_ERROR_SEQ_NUM = 51,
|
||||
XUSB_ERROR_XFER_DIR = 52,
|
||||
XUSB_ERROR_PORT_CFG = 54
|
||||
} usb_error_t;
|
||||
|
||||
typedef struct _usb_ctrl_setup_t
|
||||
|
|
2022
bdk/usb/xusbd.c
Normal file
2022
bdk/usb/xusbd.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -39,7 +39,7 @@ OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \
|
|||
sdmmc.o sdmmc_driver.o nx_emmc.o nx_emmc_bis.o nx_sd.o \
|
||||
bm92t36.o bq24193.o max17050.o max7762x.o max77620-rtc.o regulator_5v.o \
|
||||
touch.o joycon.o tmp451.o fan.o \
|
||||
usbd.o usb_descriptors.o usb_gadget_ums.o usb_gadget_hid.o \
|
||||
usbd.o xusbd.o usb_descriptors.o usb_gadget_ums.o usb_gadget_hid.o \
|
||||
hw_init.o \
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue