[PATCH V4 25/62] ST SPEAr: Added PCIE host controller base driver support.
Russell King - ARM Linux
linux at arm.linux.org.uk
Tue Jan 18 19:05:56 EST 2011
On Tue, Jan 18, 2011 at 12:41:52PM +0530, Viresh Kumar wrote:
> + clk = clk_get_sys("pcie1", NULL);
> + if (!clk) {
IS_ERR(clk)
> + pr_err("%s:couldn't get clk for pcie1\n",
> + __func__);
> + continue;
> + }
> + if (clk_enable(clk)) {
> + pr_err("%s:couldn't enable clk for pcie1\n",
> + __func__);
> + continue;
> + }
> + } else if (port == 2) {
> + /* Ideally CFG Clock should have been also enabled
> + * here. But it is done currently during board
> + * init routne*/
> + clk = clk_get_sys("pcie2", NULL);
> + if (!clk) {
IS_ERR(clk)
> + pr_err("%s:couldn't get clk for pcie2\n",
> + __func__);
> + continue;
> + }
> + if (clk_enable(clk)) {
> + pr_err("%s:couldn't enable clk for pcie2\n",
> + __func__);
> + continue;
> + }
> + }
> +
> + if ((*pcie_port_is_host)(port))
> + add_pcie_port(port, spr_pcie_base[port],
> + spr_pcie_app_base[port]);
> + }
...
> +#ifdef CONFIG_PCIEPORTBUS
> +/* PCIE0 clock always needs to be enabled if any of the three PCIE port
> + * have to be used. So call this function from the board initilization
> + * file. Ideally , all controller should have been independent from
> + * others with respect to clock.
> + */
> +int enable_pcie0_clk(void)
> +{
> + struct clk *clk;
> + /*Enable all CLK in CFG registers here only. Idealy only PCIE0
> + * should have been enabled. But Controler does not work
> + * properly if PCIE1 and PCIE2's CFG CLK is enabled in stages.
> + */
> + writel(PCIE0_CFG_VAL | PCIE1_CFG_VAL | PCIE2_CFG_VAL, PCIE_CFG);
> + clk = clk_get_sys("pcie0", NULL);
> + if (!clk) {
IS_ERR(clk)
More information about the linux-arm-kernel
mailing list