diff mbox

arm: pci: mark the dra7xx driver as broken

Message ID 20160107081102.GA6243@localhost.localdomain (mailing list archive)
State New, archived
Headers show

Commit Message

Richard Cochran Jan. 7, 2016, 8:11 a.m. UTC
This patch marks the dra7xx pci host driver as broken.  This driver
was first merged in v3.17 and has never worked.  Although the driver
compiles just fine, it is missing an essential device reset.  If the
driver is included, the kernel locks up hard shortly after booting,
before any console output appears.

Signed-off-by: Richard Cochran <richardcochran@gmail.com>

---
 drivers/pci/host/Kconfig | 1 +
 1 file changed, 1 insertion(+)

Comments

Kishon Vijay Abraham I Jan. 7, 2016, 8:44 a.m. UTC | #1
Hi Richard,

On Thursday 07 January 2016 01:41 PM, Richard Cochran wrote:
> This patch marks the dra7xx pci host driver as broken.  This driver
> was first merged in v3.17 and has never worked.  Although the driver
> compiles just fine, it is missing an essential device reset.  If the
> driver is included, the kernel locks up hard shortly after booting,
> before any console output appears.
> 
> Signed-off-by: Richard Cochran <richardcochran@gmail.com>
> 
> ---
>  drivers/pci/host/Kconfig | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/pci/host/Kconfig b/drivers/pci/host/Kconfig
> index d5e58ba..d83e8f0 100644
> --- a/drivers/pci/host/Kconfig
> +++ b/drivers/pci/host/Kconfig
> @@ -5,6 +5,7 @@ config PCI_DRA7XX
>  	bool "TI DRA7xx PCIe controller"
>  	select PCIE_DW
>  	depends on OF && HAS_IOMEM && TI_PIPE3
> +	depends on BROKEN

In my point of view the driver is not broken as such but an independent piece
(reset) which is missing, since this driver compiles and works fine if that
reset piece is added. You are right in that this shouldn't have been probed
since it's known that the reset piece is missing. Maybe we should just set
"status = disabled" in dra7.dtsi and when that reset piece is added enable it
back in dra7-evm.dts?

Thanks
Kishon
>  	help
>  	 Enables support for the PCIe controller in the DRA7xx SoC.  There
>  	 are two instances of PCIe controller in DRA7xx.  This controller can
>
Richard Cochran Jan. 7, 2016, 9:25 a.m. UTC | #2
On Thu, Jan 07, 2016 at 02:14:22PM +0530, Kishon Vijay Abraham I wrote:
> In my point of view the driver is not broken as such but an independent piece
> (reset) which is missing, since this driver compiles and works fine if that
> reset piece is added. You are right in that this shouldn't have been probed
> since it's known that the reset piece is missing. Maybe we should just set
> "status = disabled" in dra7.dtsi and when that reset piece is added enable it
> back in dra7-evm.dts?

That isn't strong enough, IMHO, since status=disabled is the default
for most every DTS item.  Maybe you could comment the PCI block out or
remove it and put a comment in about the missing piece and the lock up
behavior.  It is really a nasty bug to have the machine freeze up with
no output at all.  It took me some time to figure out what was going
on, and it would be a shame if someone else sets status=okay in their
board file and has to repeat the whole exercise.

Thanks,
Richard
Bjorn Helgaas Jan. 7, 2016, 2:42 p.m. UTC | #3
On Thu, Jan 7, 2016 at 3:25 AM, Richard Cochran
<richardcochran@gmail.com> wrote:
> On Thu, Jan 07, 2016 at 02:14:22PM +0530, Kishon Vijay Abraham I wrote:
>> In my point of view the driver is not broken as such but an independent piece
>> (reset) which is missing, since this driver compiles and works fine if that
>> reset piece is added. You are right in that this shouldn't have been probed
>> since it's known that the reset piece is missing. Maybe we should just set
>> "status = disabled" in dra7.dtsi and when that reset piece is added enable it
>> back in dra7-evm.dts?
>
> That isn't strong enough, IMHO, since status=disabled is the default
> for most every DTS item.  Maybe you could comment the PCI block out or
> remove it and put a comment in about the missing piece and the lock up
> behavior.  It is really a nasty bug to have the machine freeze up with
> no output at all.  It took me some time to figure out what was going
> on, and it would be a shame if someone else sets status=okay in their
> board file and has to repeat the whole exercise.

It sounds like dra7xx is missing a piece of essential functionality.
If that's the case, what is the benefit of having it in the kernel at
all?  It makes work for everybody else (adapting to changes outside
the driver), but it sounds like nobody gets any benefit.

If somebody posts a patch to remove the driver entirely to
linux-pci@vger.kernel.org, we can discuss whether that's the right
thing to do.

Bjorn
Kishon Vijay Abraham I Jan. 8, 2016, 6:55 a.m. UTC | #4
Hi Bjorn,

On Thursday 07 January 2016 08:12 PM, Bjorn Helgaas wrote:
> On Thu, Jan 7, 2016 at 3:25 AM, Richard Cochran
> <richardcochran@gmail.com> wrote:
>> On Thu, Jan 07, 2016 at 02:14:22PM +0530, Kishon Vijay Abraham I wrote:
>>> In my point of view the driver is not broken as such but an independent piece
>>> (reset) which is missing, since this driver compiles and works fine if that
>>> reset piece is added. You are right in that this shouldn't have been probed
>>> since it's known that the reset piece is missing. Maybe we should just set
>>> "status = disabled" in dra7.dtsi and when that reset piece is added enable it
>>> back in dra7-evm.dts?
>>
>> That isn't strong enough, IMHO, since status=disabled is the default
>> for most every DTS item.  Maybe you could comment the PCI block out or
>> remove it and put a comment in about the missing piece and the lock up
>> behavior.  It is really a nasty bug to have the machine freeze up with
>> no output at all.  It took me some time to figure out what was going
>> on, and it would be a shame if someone else sets status=okay in their
>> board file and has to repeat the whole exercise.
> 
> It sounds like dra7xx is missing a piece of essential functionality.
> If that's the case, what is the benefit of having it in the kernel at
> all?  It makes work for everybody else (adapting to changes outside
> the driver), but it sounds like nobody gets any benefit.

During the time pci-dra7xx driver was merged, the reset controller driver was
already being discussed in the list. And I didn't think it'll take this long
for it to be merged. And I didn't want pci driver development to be hampered by
these external pieces. That's why I sent the pci-dra7xx patches for merging.

IMHO merging pci-dra7xx helped to keep active development of the driver, though
I agree we should have kept mechanisms to keep the driver disabled either from
dt or in Kconfig and a way to tell that reset piece is missing if someone has
to enable the driver.
> 
> If somebody posts a patch to remove the driver entirely to
> linux-pci@vger.kernel.org, we can discuss whether that's the right
> thing to do.

I think that's not required now since Tony agreed to have pdata approach to
perform reset till reset controller is merged. I'll be posting patch for it soon.

Thanks
Kishon
diff mbox

Patch

diff --git a/drivers/pci/host/Kconfig b/drivers/pci/host/Kconfig
index d5e58ba..d83e8f0 100644
--- a/drivers/pci/host/Kconfig
+++ b/drivers/pci/host/Kconfig
@@ -5,6 +5,7 @@  config PCI_DRA7XX
 	bool "TI DRA7xx PCIe controller"
 	select PCIE_DW
 	depends on OF && HAS_IOMEM && TI_PIPE3
+	depends on BROKEN
 	help
 	 Enables support for the PCIe controller in the DRA7xx SoC.  There
 	 are two instances of PCIe controller in DRA7xx.  This controller can