Skip to content

Commit

Permalink
usb: host: xhci-tegra: Reuse stored register base address
Browse files Browse the repository at this point in the history
The base address of the XUSB controller's registers is already stored in
the HCD. Move assignment to the HCD fields to an earlier point so that
they can be reused in the tegra_xusb_config() function. This avoids the
need to pass the base address as an extra parameter, which in turn comes
in handy in subsequent patches that need to call this function from the
suspend/resume paths where these values are no longer readily available.

Based on work by JC Kuo <jckuo@nvidia.com>.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Link: https://lore.kernel.org/r/20191206140653.2085561-7-thierry.reding@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Thierry Reding authored and Greg Kroah-Hartman committed Dec 10, 2019
1 parent 96d8f62 commit ecd0fbd
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions drivers/usb/host/xhci-tegra.c
Original file line number Diff line number Diff line change
Expand Up @@ -626,9 +626,9 @@ static irqreturn_t tegra_xusb_mbox_thread(int irq, void *data)
return IRQ_HANDLED;
}

static void tegra_xusb_config(struct tegra_xusb *tegra,
struct resource *regs)
static void tegra_xusb_config(struct tegra_xusb *tegra)
{
u32 regs = tegra->hcd->rsrc_start;
u32 value;

if (tegra->soc->has_ipfs) {
Expand All @@ -642,7 +642,7 @@ static void tegra_xusb_config(struct tegra_xusb *tegra,
/* Program BAR0 space */
value = fpci_readl(tegra, XUSB_CFG_4);
value &= ~(XUSB_BASE_ADDR_MASK << XUSB_BASE_ADDR_SHIFT);
value |= regs->start & (XUSB_BASE_ADDR_MASK << XUSB_BASE_ADDR_SHIFT);
value |= regs & (XUSB_BASE_ADDR_MASK << XUSB_BASE_ADDR_SHIFT);
fpci_writel(tegra, value, XUSB_CFG_4);

usleep_range(100, 200);
Expand Down Expand Up @@ -1226,6 +1226,10 @@ static int tegra_xusb_probe(struct platform_device *pdev)
goto put_powerdomains;
}

tegra->hcd->regs = tegra->regs;
tegra->hcd->rsrc_start = regs->start;
tegra->hcd->rsrc_len = resource_size(regs);

/*
* This must happen after usb_create_hcd(), because usb_create_hcd()
* will overwrite the drvdata of the device with the hcd it creates.
Expand All @@ -1249,7 +1253,7 @@ static int tegra_xusb_probe(struct platform_device *pdev)
goto disable_phy;
}

tegra_xusb_config(tegra, regs);
tegra_xusb_config(tegra);

/*
* The XUSB Falcon microcontroller can only address 40 bits, so set
Expand All @@ -1273,10 +1277,6 @@ static int tegra_xusb_probe(struct platform_device *pdev)
goto free_firmware;
}

tegra->hcd->regs = tegra->regs;
tegra->hcd->rsrc_start = regs->start;
tegra->hcd->rsrc_len = resource_size(regs);

err = usb_add_hcd(tegra->hcd, tegra->xhci_irq, IRQF_SHARED);
if (err < 0) {
dev_err(&pdev->dev, "failed to add USB HCD: %d\n", err);
Expand Down

0 comments on commit ecd0fbd

Please sign in to comment.