
11 Mar
2020
11 Mar
'20
8:11 a.m.
On 3/11/20 7:50 AM, Chunfeng Yun wrote: [...]
- @u3_ctrl_p[x]: ip usb3 port x control register, only low 4bytes are used
- @u2_ctrl_p[x]: ip usb2 port x control register, only low 4bytes are used
- @u2_phy_pll: usb2 phy pll control register
- */
+struct mtk_ippc_regs {
- __le32 ip_pw_ctr0;
- __le32 ip_pw_ctr1;
- __le32 ip_pw_ctr2;
Please define the registers with #define macros , this struct-based approach doesn't scale.
[..]
+static int xhci_mtk_host_enable(struct mtk_xhci *mtk) +{
- struct mtk_ippc_regs *ippc = mtk->ippc;
- u32 value, check_val;
- int ret;
- int i;
- /* power on host ip */
- value = readl(&ippc->ip_pw_ctr1);
- value &= ~CTRL1_IP_HOST_PDN;
- writel(value, &ippc->ip_pw_ctr1);
- /* power on and enable all u3 ports */
- for (i = 0; i < mtk->num_u3_ports; i++) {
value = readl(&ippc->u3_ctrl_p[i]);
value &= ~(CTRL_U3_PORT_PDN | CTRL_U3_PORT_DIS);
value |= CTRL_U3_PORT_HOST_SEL;
writel(value, &ippc->u3_ctrl_p[i]);
- }
Use clrsetbits_le32() above and below and where applicable.
- /* power on and enable all u2 ports */
- for (i = 0; i < mtk->num_u2_ports; i++) {
value = readl(&ippc->u2_ctrl_p[i]);
value &= ~(CTRL_U2_PORT_PDN | CTRL_U2_PORT_DIS);
value |= CTRL_U2_PORT_HOST_SEL;
writel(value, &ippc->u2_ctrl_p[i]);
- }
[...]
+static int xhci_mtk_clks_enable(struct mtk_xhci *mtk) +{
- int ret;
- ret = clk_enable(mtk->sys_clk);
- if (ret) {
dev_err(mtk->dev, "failed to enable sys_clk\n");
goto sys_clk_err;
- }
Can you use clk_enable_bulk() and other clk.*bulk functions ? [...]
--
Best regards,
Marek Vasut