]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo_bsp/ps7_cortexa9_0/libsrc/usbps_v2_4/src/xusbps_hw.c
Update Zynq, MPSoc Cortex-A53 and MPSoc Cortex-R5 demo projects to build with the...
[freertos] / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo_bsp / ps7_cortexa9_0 / libsrc / usbps_v2_4 / src / xusbps_hw.c
1 /******************************************************************************
2 *
3 * Copyright (C) 2010 - 2015 Xilinx, Inc.  All rights reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal 
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
14 *
15 * Use of the Software is limited solely to applications:
16 * (a) running on a Xilinx device, or
17 * (b) that interact with a Xilinx device through a bus or interconnect.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 
24 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 * SOFTWARE.
26 *
27 * Except as contained in this notice, the name of the Xilinx shall not be used
28 * in advertising or otherwise to promote the sale, use or other dealings in
29 * this Software without prior written authorization from Xilinx.
30 *
31 ******************************************************************************/
32 /****************************************************************************/
33 /**
34  *
35  * @file xusbps_hw.c
36 * @addtogroup usbps_v2_4
37 * @{
38  *
39  * The implementation of the XUsbPs interface reset functionality
40  *
41  * <pre>
42  * MODIFICATION HISTORY:
43  *
44  * Ver   Who  Date     Changes
45  * ----- ---- -------- -----------------------------------------------
46  * 1.05a kpc  10/10/10 first version
47  * </pre>
48  *
49  *****************************************************************************/
50
51 /***************************** Include Files ********************************/
52
53 #include "xstatus.h"
54 #include "xusbps.h"
55 #include "xparameters.h"
56
57
58 /************************** Constant Definitions ****************************/
59 #define XUSBPS_RESET_TIMEOUT 0xFFFFF
60 /**************************** Type Definitions ******************************/
61
62 /***************** Macros (Inline Functions) Definitions ********************/
63
64 /************************** Variable Definitions ****************************/
65
66
67 /************************** Function Prototypes *****************************/
68
69
70 /*****************************************************************************/
71 /**
72 * This function perform the reset sequence to the given usbps interface by 
73 * configuring the appropriate control bits in the usbps specifc registers.
74 * the usbps reset sequence involves the below steps
75 *       Disbale the interrupts
76 *       Clear the status registers
77 *       Apply the reset command and wait for reset complete status
78 *       Update the relevant control registers with reset values
79 * @param   BaseAddress of the interface
80 *
81 * @return   N/A.
82 *
83 * @note     None.
84 *
85 ******************************************************************************/
86 void XUsbPs_ResetHw(u32 BaseAddress)
87 {
88         u32 RegVal;
89         u32 Timeout = 0;
90         
91         /* Host and device mode */
92         /* Disable the interrupts */
93         XUsbPs_WriteReg(BaseAddress,XUSBPS_IER_OFFSET,0x0);
94         /* Clear the interuupt status */
95         RegVal = XUsbPs_ReadReg(BaseAddress,XUSBPS_ISR_OFFSET);
96         XUsbPs_WriteReg(BaseAddress,XUSBPS_ISR_OFFSET,RegVal);
97
98         /* Perform the reset operation using USB CMD register */        
99         RegVal = XUsbPs_ReadReg(BaseAddress,XUSBPS_CMD_OFFSET);
100         RegVal = RegVal | XUSBPS_CMD_RST_MASK;
101         XUsbPs_WriteReg(BaseAddress,XUSBPS_CMD_OFFSET,RegVal);
102         RegVal = XUsbPs_ReadReg(BaseAddress,XUSBPS_CMD_OFFSET);
103         /* Wait till the reset operation returns success */
104         /*
105         * FIX ME: right now no indication to the caller or user about
106         * timeout overflow
107         */
108         while ((RegVal & XUSBPS_CMD_RST_MASK) && (Timeout < XUSBPS_RESET_TIMEOUT))
109         {
110                 RegVal = XUsbPs_ReadReg(BaseAddress,XUSBPS_CMD_OFFSET); 
111                 Timeout++;
112         }
113         /* Update periodic list base address register with reset value */               
114         XUsbPs_WriteReg(BaseAddress,XUSBPS_LISTBASE_OFFSET,0x0);        
115         /* Update async/endpoint list base address register with reset value */         
116         XUsbPs_WriteReg(BaseAddress,XUSBPS_ASYNCLISTADDR_OFFSET,0x0);           
117         
118 }
119
120
121
122 /** @} */