From 9f385f0bcf14e79400daa26d13a6cc818e6bf3c2 Mon Sep 17 00:00:00 2001 From: Sundar Iyer Date: Thu, 25 Aug 2011 12:20:34 +0100 Subject: [PATCH] usb: langwell_udc: Init SRAM on S0i3 resume On an exit from S0i3, the USB stack tries to access the SRAM without initializing. Add SRAM initialization code to avoid ECC error. This patch is for langwell_udc controller driver. Change-Id: I92c80eed95094706020b8659a3db6585bdd8fca3 Signed-off-by: Sundar Iyer Signed-off-by: Hao Wu Signed-off-by: Dirk Brandewie --- drivers/usb/gadget/langwell_udc.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/usb/gadget/langwell_udc.c b/drivers/usb/gadget/langwell_udc.c index 262d120..5e2e575 100644 --- a/drivers/usb/gadget/langwell_udc.c +++ b/drivers/usb/gadget/langwell_udc.c @@ -2968,6 +2968,8 @@ static void gadget_release(struct device *_dev) static void sram_init(struct langwell_udc *dev) { struct pci_dev *pdev = dev->pdev; + void __iomem *base = NULL; + void __iomem *addr = NULL; dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__); @@ -2975,6 +2977,23 @@ static void sram_init(struct langwell_udc *dev) dev->sram_size = pci_resource_len(pdev, 1); dev_info(&dev->pdev->dev, "Found private SRAM at %x size:%x\n", dev->sram_addr, dev->sram_size); + + /* initialize SRAM to 0 to avoid ECC errors */ + base = ioremap_nocache(dev->sram_addr, dev->sram_size); + if (base == NULL) { + dev_err(&dev->pdev->dev, "SRAM init: ioremap failed\n"); + return; + } + + addr = base; + + while (addr < base + dev->sram_size) { + writel(0x0, addr); + addr = addr + 4; + } + + iounmap(base); + dev->got_sram = 1; if (pci_request_region(pdev, 1, kobject_name(&pdev->dev.kobj))) { -- 2.7.4