Re: [PATCH v4 2/5] serial: 8250: Fold EndRun device support into OxSemi Tornado code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Apr 18, 2022 at 2:02 AM Maciej W. Rozycki <macro@xxxxxxxxxxx> wrote:
>
> The EndRun PTP/1588 dual serial port device is based on the Oxford
> Semiconductor OXPCIe952 UART device with the PCI vendor:device ID set
> for EndRun Technologies and uses the same sequence to determine the
> number of ports available.  Despite that we have duplicate code
> specific to the EndRun device.
>
> Remove redundant code then and factor out OxSemi Tornado device
> detection.

Reviewed-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx>

> Signed-off-by: Maciej W. Rozycki <macro@xxxxxxxxxxx>
> ---
> Changes from v3:
>
> - Factor out baud base correction along with the `Fixes' tag to 1/5.
>
> - Discard the change to move the EndRun vendor:device ID macros to
>   <linux/pci_ids.h>.
>
> New change in v3.
> ---
>  drivers/tty/serial/8250/8250_pci.c |   76 ++++++++++++-------------------------
>  1 file changed, 25 insertions(+), 51 deletions(-)
>
> linux-serial-8250-oxsemi-endrun.diff
> Index: linux-macro/drivers/tty/serial/8250/8250_pci.c
> ===================================================================
> --- linux-macro.orig/drivers/tty/serial/8250/8250_pci.c
> +++ linux-macro/drivers/tty/serial/8250/8250_pci.c
> @@ -994,41 +994,29 @@ static void pci_ite887x_exit(struct pci_
>  }
>
>  /*
> - * EndRun Technologies.
> - * Determine the number of ports available on the device.
> + * Oxford Semiconductor Inc.
> + * Check if an OxSemi device is part of the Tornado range of devices.
>   */
>  #define PCI_VENDOR_ID_ENDRUN                   0x7401
>  #define PCI_DEVICE_ID_ENDRUN_1588      0xe100
>
> -static int pci_endrun_init(struct pci_dev *dev)
> +static bool pci_oxsemi_tornado_p(struct pci_dev *dev)
>  {
> -       u8 __iomem *p;
> -       unsigned long deviceID;
> -       unsigned int  number_uarts = 0;
> +       /* OxSemi Tornado devices are all 0xCxxx */
> +       if (dev->vendor == PCI_VENDOR_ID_OXSEMI &&
> +           (dev->device & 0xf000) != 0xc000)
> +               return false;
>
> -       /* EndRun device is all 0xexxx */
> +       /* EndRun devices are all 0xExxx */
>         if (dev->vendor == PCI_VENDOR_ID_ENDRUN &&
> -               (dev->device & 0xf000) != 0xe000)
> -               return 0;
> -
> -       p = pci_iomap(dev, 0, 5);
> -       if (p == NULL)
> -               return -ENOMEM;
> +           (dev->device & 0xf000) != 0xe000)
> +               return false;
>
> -       deviceID = ioread32(p);
> -       /* EndRun device */
> -       if (deviceID == 0x07000200) {
> -               number_uarts = ioread8(p + 4);
> -               pci_dbg(dev, "%d ports detected on EndRun PCI Express device\n", number_uarts);
> -       }
> -       pci_iounmap(dev, p);
> -       return number_uarts;
> +       return true;
>  }
>
>  /*
> - * Oxford Semiconductor Inc.
> - * Check that device is part of the Tornado range of devices, then determine
> - * the number of ports available on the device.
> + * Determine the number of ports available on a Tornado device.
>   */
>  static int pci_oxsemi_tornado_init(struct pci_dev *dev)
>  {
> @@ -1036,9 +1024,7 @@ static int pci_oxsemi_tornado_init(struc
>         unsigned long deviceID;
>         unsigned int  number_uarts = 0;
>
> -       /* OxSemi Tornado devices are all 0xCxxx */
> -       if (dev->vendor == PCI_VENDOR_ID_OXSEMI &&
> -           (dev->device & 0xF000) != 0xC000)
> +       if (!pci_oxsemi_tornado_p(dev))
>                 return 0;
>
>         p = pci_iomap(dev, 0, 5);
> @@ -1049,7 +1035,10 @@ static int pci_oxsemi_tornado_init(struc
>         /* Tornado device */
>         if (deviceID == 0x07000200) {
>                 number_uarts = ioread8(p + 4);
> -               pci_dbg(dev, "%d ports detected on Oxford PCI Express device\n", number_uarts);
> +               pci_dbg(dev, "%d ports detected on %s PCI Express device\n",
> +                       number_uarts,
> +                       dev->vendor == PCI_VENDOR_ID_ENDRUN ?
> +                       "EndRun" : "Oxford");
>         }
>         pci_iounmap(dev, p);
>         return number_uarts;
> @@ -2244,7 +2233,7 @@ static struct pci_serial_quirk pci_seria
>                 .device         = PCI_ANY_ID,
>                 .subvendor      = PCI_ANY_ID,
>                 .subdevice      = PCI_ANY_ID,
> -               .init           = pci_endrun_init,
> +               .init           = pci_oxsemi_tornado_init,
>                 .setup          = pci_default_setup,
>         },
>         /*
> @@ -2667,7 +2656,6 @@ enum pci_board_num_t {
>         pbn_panacom2,
>         pbn_panacom4,
>         pbn_plx_romulus,
> -       pbn_endrun_2_3906250,
>         pbn_oxsemi,
>         pbn_oxsemi_1_3906250,
>         pbn_oxsemi_2_3906250,
> @@ -3190,20 +3178,6 @@ static struct pciserial_board pci_boards
>         },
>
>         /*
> -        * EndRun Technologies
> -       * Uses the size of PCI Base region 0 to
> -       * signal now many ports are available
> -       * 2 port 952 Uart support
> -       */
> -       [pbn_endrun_2_3906250] = {
> -               .flags          = FL_BASE0,
> -               .num_ports      = 2,
> -               .base_baud      = 3906250,
> -               .uart_offset    = 0x200,
> -               .first_offset   = 0x1000,
> -       },
> -
> -       /*
>          * This board uses the size of PCI Base region 0 to
>          * signal now many ports are available
>          */
> @@ -4123,13 +4097,6 @@ static const struct pci_device_id serial
>                 0x10b5, 0x106a, 0, 0,
>                 pbn_plx_romulus },
>         /*
> -       * EndRun Technologies. PCI express device range.
> -       *    EndRun PTP/1588 has 2 Native UARTs.
> -       */
> -       {       PCI_VENDOR_ID_ENDRUN, PCI_DEVICE_ID_ENDRUN_1588,
> -               PCI_ANY_ID, PCI_ANY_ID, 0, 0,
> -               pbn_endrun_2_3906250 },
> -       /*
>          * Quatech cards. These actually have configurable clocks but for
>          * now we just use the default.
>          *
> @@ -4390,6 +4357,13 @@ static const struct pci_device_id serial
>         {       PCI_VENDOR_ID_DIGI, PCIE_DEVICE_ID_NEO_2_OX_IBM,
>                 PCI_SUBVENDOR_ID_IBM, PCI_ANY_ID, 0, 0,
>                 pbn_oxsemi_2_3906250 },
> +       /*
> +        * EndRun Technologies. PCI express device range.
> +        * EndRun PTP/1588 has 2 Native UARTs utilizing OxSemi 952.
> +        */
> +       {       PCI_VENDOR_ID_ENDRUN, PCI_DEVICE_ID_ENDRUN_1588,
> +               PCI_ANY_ID, PCI_ANY_ID, 0, 0,
> +               pbn_oxsemi_2_3906250 },
>
>         /*
>          * SBS Technologies, Inc. P-Octal and PMC-OCTPRO cards,



-- 
With Best Regards,
Andy Shevchenko



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux