19dee205dSramneek mehresh /* 29dee205dSramneek mehresh * Freescale USB Controller 39dee205dSramneek mehresh * 49dee205dSramneek mehresh * Copyright 2013 Freescale Semiconductor, Inc. 59dee205dSramneek mehresh * 649d87b13SYork Sun * SPDX-License-Identifier: GPL-2.0+ 79dee205dSramneek mehresh */ 89dee205dSramneek mehresh 99dee205dSramneek mehresh #ifndef _ASM_FSL_USB_H_ 109dee205dSramneek mehresh #define _ASM_FSL_USB_H_ 119dee205dSramneek mehresh 129dee205dSramneek mehresh #ifdef CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE 139dee205dSramneek mehresh struct ccsr_usb_port_ctrl { 149dee205dSramneek mehresh u32 ctrl; 159dee205dSramneek mehresh u32 drvvbuscfg; 169dee205dSramneek mehresh u32 pwrfltcfg; 179dee205dSramneek mehresh u32 sts; 189dee205dSramneek mehresh u8 res_14[0xc]; 199dee205dSramneek mehresh u32 bistcfg; 209dee205dSramneek mehresh u32 biststs; 219dee205dSramneek mehresh u32 abistcfg; 229dee205dSramneek mehresh u32 abiststs; 239dee205dSramneek mehresh u8 res_30[0x10]; 249dee205dSramneek mehresh u32 xcvrprg; 259dee205dSramneek mehresh u32 anaprg; 269dee205dSramneek mehresh u32 anadrv; 279dee205dSramneek mehresh u32 anasts; 289dee205dSramneek mehresh }; 299dee205dSramneek mehresh 309dee205dSramneek mehresh struct ccsr_usb_phy { 319dee205dSramneek mehresh u32 id; 329dee205dSramneek mehresh struct ccsr_usb_port_ctrl port1; 339dee205dSramneek mehresh u8 res_50[0xc]; 349dee205dSramneek mehresh u32 tvr; 359dee205dSramneek mehresh u32 pllprg[4]; 369dee205dSramneek mehresh u8 res_70[0x4]; 379dee205dSramneek mehresh u32 anaccfg; 389dee205dSramneek mehresh u32 dbg; 399dee205dSramneek mehresh u8 res_7c[0x4]; 409dee205dSramneek mehresh struct ccsr_usb_port_ctrl port2; 419dee205dSramneek mehresh u8 res_dc[0x334]; 429dee205dSramneek mehresh }; 439dee205dSramneek mehresh 449dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_CTRL_PHY_EN (1 << 0) 459dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_DRVVBUS_CR_EN (1 << 1) 469dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_PWRFLT_CR_EN (1 << 1) 479dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_PLLPRG1_PHY_DIV (1 << 0) 489dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_PLLPRG2_PHY2_CLK_EN (1 << 0) 499dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_PLLPRG2_PHY1_CLK_EN (1 << 1) 509dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_PLLPRG2_FRAC_LPF_EN (1 << 13) 51d1c561cdSNikhil Badola #ifdef CONFIG_SYS_FSL_SINGLE_SOURCE_CLK 52d1c561cdSNikhil Badola #define CONFIG_SYS_FSL_USB_PLLPRG2_REF_DIV_INTERNAL_CLK (5 << 4) 53d1c561cdSNikhil Badola #define CONFIG_SYS_FSL_USB_PLLPRG2_MFI_INTERNAL_CLK (6 << 16) 54d1c561cdSNikhil Badola #define CONFIG_SYS_FSL_USB_INTERNAL_SOC_CLK_EN (1 << 20) 55d1c561cdSNikhil Badola #endif 569dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_PLLPRG2_REF_DIV (1 << 4) 579dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_PLLPRG2_MFI (5 << 16) 589dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_PLLPRG2_PLL_EN (1 << 21) 599dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_SYS_CLK_VALID (1 << 0) 609c641a87SSuresh Gupta #define CONFIG_SYS_FSL_USB_XCVRPRG_HS_DCNT_PROG_EN (1 << 7) 619c641a87SSuresh Gupta #define CONFIG_SYS_FSL_USB_XCVRPRG_HS_DCNT_PROG_MASK (3 << 4) 629c641a87SSuresh Gupta 639c641a87SSuresh Gupta #define INC_DCNT_THRESHOLD_25MV (0 << 4) 649c641a87SSuresh Gupta #define INC_DCNT_THRESHOLD_50MV (1 << 4) 659c641a87SSuresh Gupta #define DEC_DCNT_THRESHOLD_25MV (2 << 4) 669c641a87SSuresh Gupta #define DEC_DCNT_THRESHOLD_50MV (3 << 4) 679dee205dSramneek mehresh #else 689dee205dSramneek mehresh struct ccsr_usb_phy { 699c641a87SSuresh Gupta u32 config1; 709c641a87SSuresh Gupta u32 config2; 719c641a87SSuresh Gupta u32 config3; 729c641a87SSuresh Gupta u32 config4; 739c641a87SSuresh Gupta u32 config5; 749c641a87SSuresh Gupta u32 status1; 759dee205dSramneek mehresh u32 usb_enable_override; 769dee205dSramneek mehresh u8 res[0xe4]; 779dee205dSramneek mehresh }; 789c641a87SSuresh Gupta #define CONFIG_SYS_FSL_USB_HS_DISCNCT_INC (3 << 22) 799c641a87SSuresh Gupta #define CONFIG_SYS_FSL_USB_RX_AUTO_CAL_RD_WR_SEL (1 << 20) 809c641a87SSuresh Gupta #define CONFIG_SYS_FSL_USB_SQUELCH_PROG_WR_0 13 819c641a87SSuresh Gupta #define CONFIG_SYS_FSL_USB_SQUELCH_PROG_WR_3 16 829c641a87SSuresh Gupta #define CONFIG_SYS_FSL_USB_SQUELCH_PROG_RD_0 0 839c641a87SSuresh Gupta #define CONFIG_SYS_FSL_USB_SQUELCH_PROG_RD_3 3 849dee205dSramneek mehresh #define CONFIG_SYS_FSL_USB_ENABLE_OVERRIDE 1 859c641a87SSuresh Gupta #define CONFIG_SYS_FSL_USB_SQUELCH_PROG_MASK 0x07 869dee205dSramneek mehresh #endif 879dee205dSramneek mehresh 88*c26c80a1SNikhil Badola /* USB Erratum Checking code */ 89*c26c80a1SNikhil Badola #ifdef CONFIG_PPC 90*c26c80a1SNikhil Badola static inline bool has_erratum_a006261(void) 91*c26c80a1SNikhil Badola { 92*c26c80a1SNikhil Badola u32 svr = get_svr(); 93*c26c80a1SNikhil Badola u32 soc = SVR_SOC_VER(svr); 94*c26c80a1SNikhil Badola 95*c26c80a1SNikhil Badola switch (soc) { 96*c26c80a1SNikhil Badola case SVR_P1010: 97*c26c80a1SNikhil Badola return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); 98*c26c80a1SNikhil Badola case SVR_P2041: 99*c26c80a1SNikhil Badola case SVR_P2040: 100*c26c80a1SNikhil Badola return IS_SVR_REV(svr, 1, 0) || 101*c26c80a1SNikhil Badola IS_SVR_REV(svr, 1, 1) || IS_SVR_REV(svr, 2, 1); 102*c26c80a1SNikhil Badola case SVR_P3041: 103*c26c80a1SNikhil Badola return IS_SVR_REV(svr, 1, 0) || 104*c26c80a1SNikhil Badola IS_SVR_REV(svr, 1, 1) || 105*c26c80a1SNikhil Badola IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1); 106*c26c80a1SNikhil Badola case SVR_P5010: 107*c26c80a1SNikhil Badola case SVR_P5020: 108*c26c80a1SNikhil Badola case SVR_P5021: 109*c26c80a1SNikhil Badola return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); 110*c26c80a1SNikhil Badola case SVR_T4240: 111*c26c80a1SNikhil Badola case SVR_T4160: 112*c26c80a1SNikhil Badola case SVR_T4080: 113*c26c80a1SNikhil Badola return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); 114*c26c80a1SNikhil Badola case SVR_T1040: 115*c26c80a1SNikhil Badola return IS_SVR_REV(svr, 1, 0); 116*c26c80a1SNikhil Badola case SVR_T2080: 117*c26c80a1SNikhil Badola case SVR_T2081: 118*c26c80a1SNikhil Badola return IS_SVR_REV(svr, 1, 0); 119*c26c80a1SNikhil Badola case SVR_P5040: 120*c26c80a1SNikhil Badola return IS_SVR_REV(svr, 1, 0); 121*c26c80a1SNikhil Badola } 122*c26c80a1SNikhil Badola 123*c26c80a1SNikhil Badola return false; 124*c26c80a1SNikhil Badola } 125*c26c80a1SNikhil Badola 126*c26c80a1SNikhil Badola static inline bool has_erratum_a007075(void) 127*c26c80a1SNikhil Badola { 128*c26c80a1SNikhil Badola u32 svr = get_svr(); 129*c26c80a1SNikhil Badola u32 soc = SVR_SOC_VER(svr); 130*c26c80a1SNikhil Badola 131*c26c80a1SNikhil Badola switch (soc) { 132*c26c80a1SNikhil Badola case SVR_B4860: 133*c26c80a1SNikhil Badola case SVR_B4420: 134*c26c80a1SNikhil Badola return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); 135*c26c80a1SNikhil Badola case SVR_P1010: 136*c26c80a1SNikhil Badola return IS_SVR_REV(svr, 1, 0); 137*c26c80a1SNikhil Badola case SVR_P4080: 138*c26c80a1SNikhil Badola return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0); 139*c26c80a1SNikhil Badola } 140*c26c80a1SNikhil Badola return false; 141*c26c80a1SNikhil Badola } 142*c26c80a1SNikhil Badola #else 143*c26c80a1SNikhil Badola static inline bool has_erratum_a006261(void) 144*c26c80a1SNikhil Badola { 145*c26c80a1SNikhil Badola return false; 146*c26c80a1SNikhil Badola } 147*c26c80a1SNikhil Badola 148*c26c80a1SNikhil Badola static inline bool has_erratum_a007075(void) 149*c26c80a1SNikhil Badola { 150*c26c80a1SNikhil Badola return false; 151*c26c80a1SNikhil Badola } 152*c26c80a1SNikhil Badola 153*c26c80a1SNikhil Badola #endif 1549dee205dSramneek mehresh #endif /*_ASM_FSL_USB_H_ */ 155