1 /*******************************************************************************
3 Intel SmartPHY DSL PCIe Endpoint/ACA Linux driver
4 Copyright(c) 2016 Intel Corporation.
6 This program is free software; you can redistribute it and/or modify it
7 under the terms and conditions of the GNU General Public License,
8 version 2, as published by the Free Software Foundation.
10 This program is distributed in the hope it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
22 *******************************************************************************/
24 #include <linux/delay.h>
25 #include <linux/mutex.h>
31 #define padc_getbit(p, r) (!!(rd32(r) & (1 << p)))
32 #define padc_setbit(p, r) wr32_mask(0, BIT(p), r)
33 #define padc_clearbit(p, r) wr32_mask(BIT(p), 0, r)
35 void dc_ep_clkod_disable(struct dc_ep_priv
*priv
)
37 wr32_mask(0, IF_CLKOD_ALL
, IF_CLK
);
40 void dc_ep_icu_init(struct dc_ep_priv
*priv
)
42 /* Enable all interrupts in ICU level */
43 wr32(ICU_DMA_TX_ALL
, ICU_DMA_TX_IMER
);
44 wr32(ICU_DMA_RX_ALL
, ICU_DMA_RX_IMER
);
45 wr32(ICU_TOP_ALL
, ICU_IMER
);
47 if (priv
->msi_mode
== DC_EP_4_MSI_MODE
)
48 wr32(PCI_MSI_4_MODE
, RCU_MSI
);
50 wr32(PCI_MSI_8_MODE
, RCU_MSI
);
52 /* PCIe app has to enable all MSI interrupts regardless of MSI mode */
53 wr32(PCIE_MSI_EN_ALL
, PCIE_APPL_MSI_EN
);
56 void dc_ep_icu_disable(struct dc_ep_priv
*priv
)
58 /* Disable all PCIe related interrupts */
59 wr32(0, PCIE_APPL_MSI_EN
);
61 wr32(PCI_MSI_8_MODE
, RCU_MSI
);
63 /* Disable all interrupts in ICU level */
64 wr32(0, ICU_DMA_TX_IMER
);
65 wr32(0, ICU_DMA_RX_IMER
);
69 void dc_ep_icu_dis_intr(struct dc_ep_priv
*priv
, u32 bits
)
71 wr32_mask(~bits
, 0, ICU_IMER
);
74 void dc_ep_icu_en_intr(struct dc_ep_priv
*priv
, u32 bits
)
76 wr32_mask(0, bits
, ICU_IMER
);
79 void dc_ep_assert_device(struct dc_ep_priv
*priv
, u32 bits
)
81 struct dc_aca
*aca
= to_aca(priv
);
83 spin_lock(&aca
->rcu_lock
);
84 wr32_mask(0, bits
, RCU_REQ
);
85 spin_unlock(&aca
->rcu_lock
);
88 void dc_ep_deassert_device(struct dc_ep_priv
*priv
, u32 bits
)
90 struct dc_aca
*aca
= to_aca(priv
);
92 spin_lock(&aca
->rcu_lock
);
93 wr32_mask(bits
, 0, RCU_REQ
);
94 spin_unlock(&aca
->rcu_lock
);
97 int dc_ep_reset_device(struct dc_ep_priv
*priv
, u32 bits
)
99 int retry
= EP_TIMEOUT
;
102 do { } while (retry
-- && (!(rd32(RCU_STAT
) & bits
)));
105 dev_err(priv
->dev
, "%s failed to reset\n", __func__
);
111 int dc_ep_clk_on(struct dc_ep_priv
*priv
, u32 bits
)
113 int retry
= EP_TIMEOUT
;
114 struct dc_aca
*aca
= to_aca(priv
);
116 spin_lock(&aca
->clk_lock
);
117 wr32_mask(bits
, 0, PMU_PWDCR
);
118 spin_unlock(&aca
->clk_lock
);
120 do { } while (--retry
&& (rd32(PMU_SR
) & bits
));
123 dev_err(priv
->dev
, "%s failed\n", __func__
);
129 int dc_ep_clk_off(struct dc_ep_priv
*priv
, u32 bits
)
131 int retry
= EP_TIMEOUT
;
132 struct dc_aca
*aca
= to_aca(priv
);
134 spin_lock(&aca
->clk_lock
);
135 wr32_mask(0, bits
, PMU_PWDCR
);
136 spin_unlock(&aca
->clk_lock
);
139 && (!(rd32(PMU_SR
) & bits
)));
141 dev_err(priv
->dev
, "%s failed\n", __func__
);
147 int dc_ep_clk_set(struct dc_ep_priv
*priv
, u32 sysclk
, u32 ppeclk
)
149 struct dc_aca
*aca
= to_aca(priv
);
151 if (sysclk
> SYS_CLK_MAX
|| ppeclk
> PPE_CLK_MAX
)
154 spin_lock(&aca
->clk_lock
);
155 wr32_mask(PPE_CLK
| SYS_CLK
,
156 SM(sysclk
, SYS_CLK
) | SM(ppeclk
, PPE_CLK
), PLL_OMCFG
);
157 spin_unlock(&aca
->clk_lock
);
161 int dc_ep_clk_get(struct dc_ep_priv
*priv
, u32
*sysclk
, u32
*ppeclk
)
165 val
= rd32(PLL_OMCFG
);
166 *sysclk
= MS(val
, SYS_CLK
);
167 *ppeclk
= MS(val
, PPE_CLK
);
171 int dc_ep_gpio_dir(struct dc_ep_priv
*priv
, u32 gpio
, int dir
)
173 struct dc_aca
*aca
= to_aca(priv
);
175 if (gpio
> aca
->max_gpio
)
178 if ((dir
!= GPIO_DIR_IN
) && (dir
!= GPIO_DIR_OUT
))
181 if (dir
== GPIO_DIR_IN
)
182 wr32(BIT(gpio
), GPIO_DIRCLR
);
184 wr32(BIT(gpio
), GPIO_DIRSET
);
188 int dc_ep_gpio_set(struct dc_ep_priv
*priv
, u32 gpio
, int val
)
190 struct dc_aca
*aca
= to_aca(priv
);
192 if (gpio
> aca
->max_gpio
)
195 dc_ep_gpio_dir(priv
, gpio
, GPIO_DIR_OUT
);
198 wr32(BIT(gpio
), GPIO_OUTSET
);
200 wr32(BIT(gpio
), GPIO_OUTCLR
);
204 int dc_ep_gpio_get(struct dc_ep_priv
*priv
, u32 gpio
, int *val
)
207 struct dc_aca
*aca
= to_aca(priv
);
209 if (gpio
> aca
->max_gpio
)
212 dir
= rd32(GPIO_DIR
);
213 if ((dir
>> gpio
) & 0x1)
214 *val
= (rd32(GPIO_OUT
) >> gpio
) & 0x1;
216 *val
= (rd32(GPIO_IN
) >> gpio
) & 0x1;
220 int dc_ep_pinmux_set(struct dc_ep_priv
*priv
, u32 gpio
, int func
)
222 struct dc_aca
*aca
= to_aca(priv
);
224 if (gpio
> aca
->max_gpio
)
227 if (func
>= MUX_FUNC_RES
)
230 mutex_lock(&aca
->pin_lock
);
231 wr32_mask(PADC_MUX_M
, func
, PADC_MUX(gpio
));
232 mutex_unlock(&aca
->pin_lock
);
236 int dc_ep_pinmux_get(struct dc_ep_priv
*priv
, u32 gpio
, int *func
)
238 struct dc_aca
*aca
= to_aca(priv
);
240 if (gpio
> aca
->max_gpio
)
243 *func
= rd32(PADC_MUX(gpio
));
247 int dc_ep_gpio_pupd_set(struct dc_ep_priv
*priv
, u32 gpio
, u32 val
)
249 struct dc_aca
*aca
= to_aca(priv
);
251 if (gpio
> aca
->max_gpio
)
254 /* Not support for both enabled */
255 if (val
>= GPIO_PUPD_BOTH
)
258 mutex_lock(&aca
->pin_lock
);
260 case GPIO_PUPD_DISABLE
:
261 padc_clearbit(gpio
, PADC_PUEN
);
262 padc_clearbit(gpio
, PADC_PDEN
);
265 padc_setbit(gpio
, PADC_PUEN
);
266 padc_clearbit(gpio
, PADC_PDEN
);
269 padc_setbit(gpio
, PADC_PDEN
);
270 padc_clearbit(gpio
, PADC_PUEN
);
275 mutex_unlock(&aca
->pin_lock
);
279 int dc_ep_gpio_od_set(struct dc_ep_priv
*priv
, u32 gpio
, int val
)
281 struct dc_aca
*aca
= to_aca(priv
);
283 if (gpio
> aca
->max_gpio
)
286 mutex_lock(&aca
->pin_lock
);
288 padc_setbit(gpio
, PADC_OD
);
290 padc_clearbit(gpio
, PADC_OD
);
291 mutex_unlock(&aca
->pin_lock
);
295 int dc_ep_gpio_src_set(struct dc_ep_priv
*priv
, u32 gpio
, int val
)
297 struct dc_aca
*aca
= to_aca(priv
);
299 if (gpio
> aca
->max_gpio
)
302 mutex_lock(&aca
->pin_lock
);
304 padc_setbit(gpio
, PADC_SRC
);
306 padc_clearbit(gpio
, PADC_SRC
);
307 mutex_unlock(&aca
->pin_lock
);
311 int dc_ep_gpio_dcc_set(struct dc_ep_priv
*priv
, u32 gpio
, u32 val
)
313 struct dc_aca
*aca
= to_aca(priv
);
315 if (gpio
> aca
->max_gpio
)
318 if (val
>= GPIO_DRV_CUR_MAX
)
321 mutex_lock(&aca
->pin_lock
);
322 wr32_mask((0x3 << (gpio
* 2)), (val
<< (gpio
* 2)), PADC_DCC
);
323 mutex_unlock(&aca
->pin_lock
);