Re: [PATCH] serial: 8250: Integrate Fintek into pnp

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

 



Hello Peter

Thanks for your reply, definitely good reading material :)

On Tue, Jan 26, 2016 at 1:39 AM, Peter Hurley <peter@xxxxxxxxxxxxxxxxxx> wrote:
> Hi Ricardo,
>
> On 01/15/2016 08:27 AM, Ricardo Ribalda Delgado wrote:
>> From: Peter Hurley <peter@xxxxxxxxxxxxxxxxxx>
>
> Please remove. That's typically only used when someone else has
> actually written the patch, but the actual submitter has some role
> in the patch. Doesn't apply here.
>
>
>> The 8250_fintek driver advertises as the PNP0501 driver; however this
>> conflicts with the standard 16550A uart PNP0501. The conflict causes
>> the 8250_fintek driver to load with _every_ PNP0501, but never probe,
>> and causing the entire 8250 driver stack to unload if the 8250_fintek
>> driver is unloaded (modprobe doesn't know that 8250_pnp rather than
>> 8250_fintek claimed the resource).
>>
>> This patch merges the Fintek driver into the pnp. Thre is a new device
>> flags that tells the pnp driver when to probe the fintek devices.
>
> How is this system doing PNP? BIOS, ACPI or ISA?
> Does this device announce other compatible device ids?

Through ACPI,

This is the ACPI table for that particular device.

I cannot find anything that makes it differentiable form a standard
16550A, but ACPI is definately not my mother tonge :)

                    Device (UAR1)
                    {
                        Name (_HID, EisaId ("PNP0501") /*
16550A-compatible COM Serial Port */)  // _HID: Hardware ID
                        Name (_UID, 0x01)  // _UID: Unique ID
                        Method (_STA, 0, Serialized)  // _STA: Status
                        {
                            If (0x01)
                            {
                                If ((S216 == 0x00))
                                {
                                    Return (0x00)
                                }

                                ENFG (0x00)
                                Local0 = WR30 /* \_SB_.PCI0.LPC0.F216.WR30 */
                                Local1 = WR60 /* \_SB_.PCI0.LPC0.F216.WR60 */
                                EXFG ()
                                If ((Local0 == 0xFF))
                                {
                                    Return (0x00)
                                }

                                If ((Local1 == 0xFF))
                                {
                                    Return (0x00)
                                }

                                Local0 &= 0x01
                                If (Local0)
                                {
                                    Return (0x0F)
                                }
                                ElseIf (Local1)
                                {
                                    Return (0x0D)
                                }
                                Else
                                {
                                    Return (0x00)
                                }
                            }

                            Return (0x00)
                        }

                        Method (_DIS, 0, Serialized)  // _DIS: Disable Device
                        {
                            ENFG (0x00)
                            WR30 = 0x00
                            EXFG ()
                        }

                        Method (_CRS, 0, Serialized)  // _CRS: Current
Resource Settings
                        {
                            Name (BUF0, ResourceTemplate ()
                            {
                                IO (Decode16,
                                    0x03F8,             // Range Minimum
                                    0x03F8,             // Range Maximum
                                    0x01,               // Alignment
                                    0x08,               // Length
                                    _Y1E)
                                IRQNoFlags (_Y1F)
                                    {7}
                            })
                            ENFG (0x00)
                            If (0x01)
                            {
                                CreateByteField (BUF0,
\_SB.PCI0.LPC0.F216.UAR1._CRS._Y1E._MIN, IOL0)  // _MIN: Minimum Base
Address
                                CreateByteField (BUF0, 0x03, IOH0)
                                CreateByteField (BUF0,
\_SB.PCI0.LPC0.F216.UAR1._CRS._Y1E._MAX, IOL1)  // _MAX: Maximum Base
Address
                                CreateByteField (BUF0, 0x05, IOH1)
                                CreateByteField (BUF0,
\_SB.PCI0.LPC0.F216.UAR1._CRS._Y1E._LEN, LEN0)  // _LEN: Length
                                CreateWordField (BUF0,
\_SB.PCI0.LPC0.F216.UAR1._CRS._Y1F._INT, IRQW)  // _INT: Interrupts
                                IOH0 = WR60 /* \_SB_.PCI0.LPC0.F216.WR60 */
                                IOL0 = WR61 /* \_SB_.PCI0.LPC0.F216.WR61 */
                                IOH1 = WR60 /* \_SB_.PCI0.LPC0.F216.WR60 */
                                IOL1 = WR61 /* \_SB_.PCI0.LPC0.F216.WR61 */
                                LEN0 = 0x08
                                Local0 = (WR70 & 0x0F)
                                If (Local0)
                                {
                                    IRQW = (One << Local0)
                                }
                                Else
                                {
                                    IRQW = Zero
                                }
                            }

                            EXFG ()
                            Return (BUF0) /*
\_SB_.PCI0.LPC0.F216.UAR1._CRS.BUF0 */
                        }

                        Name (_PRS, ResourceTemplate ()  // _PRS:
Possible Resource Settings
                        {
                            StartDependentFn (0x00, 0x00)
                            {
                                IO (Decode16,
                                    0x03F8,             // Range Minimum
                                    0x03F8,             // Range Maximum
                                    0x01,               // Alignment
                                    0x08,               // Length
                                    )
                                IRQNoFlags ()
                                    {4}
                                DMA (Compatibility, NotBusMaster, Transfer8, )
                                    {}
                            }
                            StartDependentFnNoPri ()
                            {
                                IO (Decode16,
                                    0x03F8,             // Range Minimum
                                    0x03F8,             // Range Maximum
                                    0x01,               // Alignment
                                    0x08,               // Length
                                    )
                                IRQNoFlags ()
                                    {3,4,5,7}
                                DMA (Compatibility, NotBusMaster, Transfer8, )
                                    {}
                            }
                            StartDependentFnNoPri ()
                            {
                                IO (Decode16,
                                    0x02F8,             // Range Minimum
                                    0x02F8,             // Range Maximum
                                    0x01,               // Alignment
                                    0x08,               // Length
                                    )
                                IRQNoFlags ()
                                    {3,4,5,7}
                                DMA (Compatibility, NotBusMaster, Transfer8, )
                                    {}
                            }
                            StartDependentFnNoPri ()
                            {
                                IO (Decode16,
                                    0x03E8,             // Range Minimum
                                    0x03E8,             // Range Maximum
                                    0x01,               // Alignment
                                    0x08,               // Length
                                    )
                                IRQNoFlags ()
                                    {3,4,5,7}
                                DMA (Compatibility, NotBusMaster, Transfer8, )
                                    {}
                            }
                            StartDependentFnNoPri ()
                            {
                                IO (Decode16,
                                    0x02E8,             // Range Minimum
                                    0x02E8,             // Range Maximum
                                    0x01,               // Alignment
                                    0x08,               // Length
                                    )
                                IRQNoFlags ()
                                    {3,4,5,7}
                                DMA (Compatibility, NotBusMaster, Transfer8, )
                                    {}
                            }
                            EndDependentFn ()
                        })
                        Method (_SRS, 1, Serialized)  // _SRS: Set
Resource Settings
                        {
                            CreateByteField (Arg0, 0x02, IOLO)
                            CreateByteField (Arg0, 0x03, IOHI)
                            CreateWordField (Arg0, 0x09, IRQW)
                            ENFG (0x00)
                            WR30 = 0x00
                            WR61 = IOLO /*
\_SB_.PCI0.LPC0.F216.UAR1._SRS.IOLO */
                            WR60 = IOHI /*
\_SB_.PCI0.LPC0.F216.UAR1._SRS.IOHI */
                            FindSetRightBit (IRQW, Local0)
                            If ((IRQW != Zero))
                            {
                                Local0--
                            }

                            WR70 = Local0
                            WR30 = 0x01
                            EXFG ()
                        }

                        Method (_PS0, 0, Serialized)  // _PS0: Power State 0
                        {
                            ENFG (0x00)
                            WR30 = 0x01
                            EXFG ()
                        }

                        Method (_PS3, 0, Serialized)  // _PS3: Power State 3
                        {
                            ENFG (0x00)
                            WR30 = 0x00
                            EXFG ()
                        }
                    }

Shall I just resend the patch removing the From (I used git ammend,
sorry) and Credit?

Thanks!
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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