All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kernel-janitors@vger.kernel.org
Subject: [bug report] tty: cyclades, cache HW version
Date: Wed, 24 Jun 2020 13:18:58 +0000	[thread overview]
Message-ID: <20200624131858.GA9972@mwanda> (raw)

[ Kees recently removed the uninitialized_var() variable so ancient
  code has started to print warnings.  GCC doesn't warn about
  uninitialized variables these days either.  It's been buggy for
  10 years so it's probably not an emergency.  -dan ]

Hello Jiri Slaby,

The patch 101b81590d8d: "tty: cyclades, cache HW version" from Jun
11, 2009, leads to the following static checker warning:

	drivers/tty/cyclades.c:3805 cy_pci_probe()
	error: uninitialized symbol 'mailbox'.

drivers/tty/cyclades.c
  3640  static int cy_pci_probe(struct pci_dev *pdev,
  3641                  const struct pci_device_id *ent)
  3642  {
  3643          struct cyclades_card *card;
  3644          void __iomem *addr0 = NULL, *addr2 = NULL;
  3645          char *card_name = NULL;
  3646          u32 mailbox;
                ^^^^^^^^^^^^

  3647          unsigned int device_id, nchan = 0, card_no, i, j;
  3648          unsigned char plx_ver;
  3649          int retval, irq;
  3650  
  3651          retval = pci_enable_device(pdev);
  3652          if (retval) {
  3653                  dev_err(&pdev->dev, "cannot enable device\n");
  3654                  goto err;
  3655          }
  3656  
  3657          /* read PCI configuration area */
  3658          irq = pdev->irq;
  3659          device_id = pdev->device & ~PCI_DEVICE_ID_MASK;
  3660  
  3661  #if defined(__alpha__)
  3662          if (device_id = PCI_DEVICE_ID_CYCLOM_Y_Lo) {   /* below 1M? */
  3663                  dev_err(&pdev->dev, "Cyclom-Y/PCI not supported for low "
  3664                          "addresses on Alpha systems.\n");
  3665                  retval = -EIO;
  3666                  goto err_dis;
  3667          }
  3668  #endif
  3669          if (device_id = PCI_DEVICE_ID_CYCLOM_Z_Lo) {
  3670                  dev_err(&pdev->dev, "Cyclades-Z/PCI not supported for low "
  3671                          "addresses\n");
  3672                  retval = -EIO;
  3673                  goto err_dis;
  3674          }
  3675  
  3676          if (pci_resource_flags(pdev, 2) & IORESOURCE_IO) {
  3677                  dev_warn(&pdev->dev, "PCI I/O bit incorrectly set. Ignoring "
  3678                                  "it...\n");
  3679                  pdev->resource[2].flags &= ~IORESOURCE_IO;
  3680          }
  3681  
  3682          retval = pci_request_regions(pdev, "cyclades");
  3683          if (retval) {
  3684                  dev_err(&pdev->dev, "failed to reserve resources\n");
  3685                  goto err_dis;
  3686          }
  3687  
  3688          retval = -EIO;
  3689          if (device_id = PCI_DEVICE_ID_CYCLOM_Y_Lo ||
  3690                          device_id = PCI_DEVICE_ID_CYCLOM_Y_Hi) {
  3691                  card_name = "Cyclom-Y";
  3692  
  3693                  addr0 = ioremap(pci_resource_start(pdev, 0),
  3694                                  CyPCI_Yctl);
  3695                  if (addr0 = NULL) {
  3696                          dev_err(&pdev->dev, "can't remap ctl region\n");
  3697                          goto err_reg;
  3698                  }
  3699                  addr2 = ioremap(pci_resource_start(pdev, 2),
  3700                                  CyPCI_Ywin);
  3701                  if (addr2 = NULL) {
  3702                          dev_err(&pdev->dev, "can't remap base region\n");
  3703                          goto err_unmap;
  3704                  }
  3705  
  3706                  nchan = CyPORTS_PER_CHIP * cyy_init_card(addr2, 1);
  3707                  if (nchan = 0) {
  3708                          dev_err(&pdev->dev, "Cyclom-Y PCI host card with no "
  3709                                          "Serial-Modules\n");
  3710                          goto err_unmap;
  3711                  }
  3712          } else if (device_id = PCI_DEVICE_ID_CYCLOM_Z_Hi) {
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  3713                  struct RUNTIME_9060 __iomem *ctl_addr;
  3714  
  3715                  ctl_addr = addr0 = ioremap(pci_resource_start(pdev, 0),
  3716                                  CyPCI_Zctl);
  3717                  if (addr0 = NULL) {
  3718                          dev_err(&pdev->dev, "can't remap ctl region\n");
  3719                          goto err_reg;
  3720                  }
  3721  
  3722                  /* Disable interrupts on the PLX before resetting it */
  3723                  cy_writew(&ctl_addr->intr_ctrl_stat,
  3724                                  readw(&ctl_addr->intr_ctrl_stat) & ~0x0900);
  3725  
  3726                  plx_init(pdev, irq, addr0);
  3727  
  3728                  mailbox = readl(&ctl_addr->mail_box_0);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Only initialized for PCI_DEVICE_ID_CYCLOM_Z_Hi.

  3729  
  3730                  addr2 = ioremap(pci_resource_start(pdev, 2),
  3731                                  mailbox = ZE_V1 ? CyPCI_Ze_win : CyPCI_Zwin);
  3732                  if (addr2 = NULL) {
  3733                          dev_err(&pdev->dev, "can't remap base region\n");
  3734                          goto err_unmap;
  3735                  }
  3736  
  3737                  if (mailbox = ZE_V1) {
  3738                          card_name = "Cyclades-Ze";
  3739                  } else {
  3740                          card_name = "Cyclades-8Zo";
  3741  #ifdef CY_PCI_DEBUG
  3742                          if (mailbox = ZO_V1) {
  3743                                  cy_writel(&ctl_addr->loc_addr_base, WIN_CREG);
  3744                                  dev_info(&pdev->dev, "Cyclades-8Zo/PCI: FPGA "
  3745                                          "id %lx, ver %lx\n", (ulong)(0xff &
  3746                                          readl(&((struct CUSTOM_REG *)addr2)->
  3747                                                  fpga_id)), (ulong)(0xff &
  3748                                          readl(&((struct CUSTOM_REG *)addr2)->
  3749                                                  fpga_version)));
  3750                                  cy_writel(&ctl_addr->loc_addr_base, WIN_RAM);
  3751                          } else {
  3752                                  dev_info(&pdev->dev, "Cyclades-Z/PCI: New "
  3753                                          "Cyclades-Z board.  FPGA not loaded\n");
  3754                          }
  3755  #endif
  3756                          /* The following clears the firmware id word.  This
  3757                             ensures that the driver will not attempt to talk to
  3758                             the board until it has been properly initialized.
  3759                           */
  3760                          if ((mailbox = ZO_V1) || (mailbox = ZO_V2))
  3761                                  cy_writel(addr2 + ID_ADDRESS, 0L);
  3762                  }
  3763  
  3764                  retval = cyz_load_fw(pdev, addr2, addr0, irq);
  3765                  if (retval <= 0)
  3766                          goto err_unmap;
  3767                  nchan = retval;
  3768          }
  3769  
  3770          if ((cy_next_channel + nchan) > NR_PORTS) {
  3771                  dev_err(&pdev->dev, "Cyclades-8Zo/PCI found, but no "
  3772                          "channels are available. Change NR_PORTS in "
  3773                          "cyclades.c and recompile kernel.\n");
  3774                  goto err_unmap;
  3775          }
  3776          /* fill the next cy_card structure available */
  3777          for (card_no = 0; card_no < NR_CARDS; card_no++) {
  3778                  card = &cy_card[card_no];
  3779                  if (card->base_addr = NULL)
  3780                          break;
  3781          }
  3782          if (card_no = NR_CARDS) {      /* no more cy_cards available */
  3783                  dev_err(&pdev->dev, "Cyclades-8Zo/PCI found, but no "
  3784                          "more cards can be used. Change NR_CARDS in "
  3785                          "cyclades.c and recompile kernel.\n");
  3786                  goto err_unmap;
  3787          }
  3788  
  3789          if (device_id = PCI_DEVICE_ID_CYCLOM_Y_Lo ||
  3790                          device_id = PCI_DEVICE_ID_CYCLOM_Y_Hi) {
  3791                  /* allocate IRQ */
  3792                  retval = request_irq(irq, cyy_interrupt,
  3793                                  IRQF_SHARED, "Cyclom-Y", card);
  3794                  if (retval) {
  3795                          dev_err(&pdev->dev, "could not allocate IRQ\n");
  3796                          goto err_unmap;
  3797                  }
  3798                  card->num_chips = nchan / CyPORTS_PER_CHIP;
  3799          } else {

There are several other PCI devices besides PCI_DEVICE_ID_CYCLOM_Z_Hi.

  3800                  struct FIRM_ID __iomem *firm_id = addr2 + ID_ADDRESS;
  3801                  struct ZFW_CTRL __iomem *zfw_ctrl;
  3802  
  3803                  zfw_ctrl = addr2 + (readl(&firm_id->zfwctrl_addr) & 0xfffff);
  3804  
  3805                  card->hw_ver = mailbox;
                                       ^^^^^^^
Uninitialized.

  3806                  card->num_chips = (unsigned int)-1;
  3807                  card->board_ctrl = &zfw_ctrl->board_ctrl;
  3808  #ifdef CONFIG_CYZ_INTR
  3809                  /* allocate IRQ only if board has an IRQ */
  3810                  if (irq != 0 && irq != 255) {
  3811                          retval = request_irq(irq, cyz_interrupt,
  3812                                          IRQF_SHARED, "Cyclades-Z", card);
  3813                          if (retval) {
  3814                                  dev_err(&pdev->dev, "could not allocate IRQ\n");
  3815                                  goto err_unmap;
  3816                          }
  3817                  }
  3818  #endif                          /* CONFIG_CYZ_INTR */
  3819          }
  3820  
  3821          /* set cy_card */
  3822          card->base_addr = addr2;
  3823          card->ctl_addr.p9050 = addr0;
  3824          card->irq = irq;
  3825          card->bus_index = 1;
  3826          card->first_line = cy_next_channel;
  3827          card->nports = nchan;

regards,
dan carpenter

             reply	other threads:[~2020-06-24 13:18 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-24 13:18 Dan Carpenter [this message]
2020-06-25  8:57 ` [bug report] tty: cyclades, cache HW version Jiri Slaby
2020-06-25 16:36 ` Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200624131858.GA9972@mwanda \
    --to=dan.carpenter@oracle.com \
    --cc=kernel-janitors@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.