1667dbcd0SMasahiro Yamada /* 2667dbcd0SMasahiro Yamada * Copyright (C) 2016 Socionext Inc. 3667dbcd0SMasahiro Yamada * 4667dbcd0SMasahiro Yamada * SPDX-License-Identifier: GPL-2.0+ 5667dbcd0SMasahiro Yamada */ 6667dbcd0SMasahiro Yamada 7667dbcd0SMasahiro Yamada #include <common.h> 89c5313dcSMasahiro Yamada #include <spl.h> 9667dbcd0SMasahiro Yamada #include <linux/bitops.h> 10667dbcd0SMasahiro Yamada #include <linux/io.h> 11667dbcd0SMasahiro Yamada 12667dbcd0SMasahiro Yamada #include "../init.h" 1376466bd7SMasahiro Yamada #include "../sc64-regs.h" 14667dbcd0SMasahiro Yamada #include "../sg-regs.h" 15667dbcd0SMasahiro Yamada 16c21f5854SMasahiro Yamada #define SDCTRL_EMMC_HW_RESET 0x59810280 17c21f5854SMasahiro Yamada 18667dbcd0SMasahiro Yamada void uniphier_ld11_clk_init(void) 19667dbcd0SMasahiro Yamada { 209c5313dcSMasahiro Yamada /* if booted from a device other than USB, without stand-by MPU */ 219c5313dcSMasahiro Yamada if ((readl(SG_PINMON0) & BIT(27)) && 22784548efSMasahiro Yamada uniphier_boot_device_raw() != BOOT_DEVICE_USB) { 23667dbcd0SMasahiro Yamada writel(1, SG_ETPHYPSHUT); 24667dbcd0SMasahiro Yamada writel(1, SG_ETPHYCNT); 25667dbcd0SMasahiro Yamada 26667dbcd0SMasahiro Yamada udelay(1); /* wait for regulator level 1.1V -> 2.5V */ 27667dbcd0SMasahiro Yamada 28667dbcd0SMasahiro Yamada writel(3, SG_ETPHYCNT); 29667dbcd0SMasahiro Yamada writel(3, SG_ETPHYPSHUT); 30667dbcd0SMasahiro Yamada writel(7, SG_ETPHYCNT); 31667dbcd0SMasahiro Yamada } 3276466bd7SMasahiro Yamada 33c21f5854SMasahiro Yamada /* TODO: use "mmc-pwrseq-emmc" */ 34c21f5854SMasahiro Yamada writel(1, SDCTRL_EMMC_HW_RESET); 35c21f5854SMasahiro Yamada 368850c5d5STom Rini #ifdef CONFIG_USB_EHCI_HCD 3776466bd7SMasahiro Yamada { 3876466bd7SMasahiro Yamada /* FIXME: the current clk driver can not handle parents */ 3976466bd7SMasahiro Yamada u32 tmp; 40395e2142SMasahiro Yamada int ch; 41395e2142SMasahiro Yamada 4276466bd7SMasahiro Yamada tmp = readl(SC_CLKCTRL4); 43*2bf7c86eSMasahiro Yamada tmp |= BIT(10) | BIT(8); /* MIO, STDMAC */ 4476466bd7SMasahiro Yamada writel(tmp, SC_CLKCTRL4); 45395e2142SMasahiro Yamada 46395e2142SMasahiro Yamada for (ch = 0; ch < 3; ch++) { 47395e2142SMasahiro Yamada void __iomem *phyctrl = (void __iomem *)SG_USBPHYCTRL; 48395e2142SMasahiro Yamada 49395e2142SMasahiro Yamada writel(0x82280600, phyctrl + 8 * ch); 50395e2142SMasahiro Yamada writel(0x00000106, phyctrl + 8 * ch + 4); 51395e2142SMasahiro Yamada } 5276466bd7SMasahiro Yamada } 5376466bd7SMasahiro Yamada #endif 54667dbcd0SMasahiro Yamada } 55