All of lore.kernel.org
 help / color / mirror / Atom feed
* [bug report] PCI: faraday: Add clock handling
@ 2020-12-07 13:48 Dan Carpenter
  0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2020-12-07 13:48 UTC (permalink / raw)
  To: linus.walleij; +Cc: linux-pci

Hello Linus Walleij,

The patch 2eeb02b28579: "PCI: faraday: Add clock handling" from May
15, 2017, leads to the following static checker warning:

	drivers/pci/controller/pci-ftpci100.c:496 faraday_pci_probe()
	warn: 'p->bus_clk' isn't an ERR_PTR

drivers/pci/controller/pci-ftpci100.c
   443  
   444          /* Retrieve and enable optional clocks */
   445          clk = devm_clk_get(dev, "PCLK");
   446          if (IS_ERR(clk))
   447                  return PTR_ERR(clk);
   448          ret = clk_prepare_enable(clk);
   449          if (ret) {
   450                  dev_err(dev, "could not prepare PCLK\n");
   451                  return ret;
   452          }
   453          p->bus_clk = devm_clk_get(dev, "PCICLK");
   454          if (IS_ERR(p->bus_clk))
   455                  return PTR_ERR(p->bus_clk);
                               ^^^^^^^^^^^^^^^^^^^
We ensure that "p->bus_clk" is not an error pointer here.

   456          ret = clk_prepare_enable(p->bus_clk);
   457          if (ret) {
   458                  dev_err(dev, "could not prepare PCICLK\n");
   459                  return ret;
   460          }
   461  
   462          p->base = devm_platform_ioremap_resource(pdev, 0);
   463          if (IS_ERR(p->base))
   464                  return PTR_ERR(p->base);
   465  
   466          win = resource_list_first_type(&host->windows, IORESOURCE_IO);
   467          if (win) {
   468                  io = win->res;
   469                  if (!faraday_res_to_memcfg(io->start - win->offset,
   470                                             resource_size(io), &val)) {
   471                          /* setup I/O space size */
   472                          writel(val, p->base + PCI_IOSIZE);
   473                  } else {
   474                          dev_err(dev, "illegal IO mem size\n");
   475                          return -EINVAL;
   476                  }
   477          }
   478  
   479          /* Setup hostbridge */
   480          val = readl(p->base + PCI_CTRL);
   481          val |= PCI_COMMAND_IO;
   482          val |= PCI_COMMAND_MEMORY;
   483          val |= PCI_COMMAND_MASTER;
   484          writel(val, p->base + PCI_CTRL);
   485          /* Mask and clear all interrupts */
   486          faraday_raw_pci_write_config(p, 0, 0, FARADAY_PCI_CTRL2 + 2, 2, 0xF000);
   487          if (variant->cascaded_irq) {
   488                  ret = faraday_pci_setup_cascaded_irq(p);
   489                  if (ret) {
   490                          dev_err(dev, "failed to setup cascaded IRQ\n");
   491                          return ret;
   492                  }
   493          }
   494  
   495          /* Check bus clock if we can gear up to 66 MHz */
   496          if (!IS_ERR(p->bus_clk)) {
                    ^^^^^^^^^^^^^^^^^^
This check can be deleted, no?

   497                  unsigned long rate;
   498                  u32 val;
   499  
   500                  faraday_raw_pci_read_config(p, 0, 0,
   501                                              FARADAY_PCI_STATUS_CMD, 4, &val);
   502                  rate = clk_get_rate(p->bus_clk);
   503  
   504                  if ((rate == 33000000) && (val & PCI_STATUS_66MHZ_CAPABLE)) {
   505                          dev_info(dev, "33MHz bus is 66MHz capable\n");
   506                          max_bus_speed = PCI_SPEED_66MHz;
   507                          ret = clk_set_rate(p->bus_clk, 66000000);
   508                          if (ret)
   509                                  dev_err(dev, "failed to set bus clock\n");
   510                  } else {
   511                          dev_info(dev, "33MHz only bus\n");
   512                          max_bus_speed = PCI_SPEED_33MHz;
   513                  }
   514  
   515                  /* Bumping the clock may fail so read back the rate */
   516                  rate = clk_get_rate(p->bus_clk);
   517                  if (rate == 33000000)
   518                          cur_bus_speed = PCI_SPEED_33MHz;
   519                  if (rate == 66000000)
   520                          cur_bus_speed = PCI_SPEED_66MHz;
   521          }
   522  
   523          ret = faraday_pci_parse_map_dma_ranges(p);
   524          if (ret)
   525                  return ret;
   526  
   527          ret = pci_scan_root_bus_bridge(host);
   528          if (ret) {
   529                  dev_err(dev, "failed to scan host: %d\n", ret);
   530                  return ret;
   531          }
   532          p->bus = host->bus;

regards,
dan carpenter

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-12-07 13:49 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-12-07 13:48 [bug report] PCI: faraday: Add clock handling Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.