enable/disable devices behavior
Dave Airlie
airlied at redhat.com
Tue May 5 22:09:28 PDT 2009
On Wed, 2009-05-06 at 01:56 -0300, Tiago Vignatti wrote:
> Dave Airlie escreveu:
> > On Wed, 2009-05-06 at 01:37 -0300, Tiago Vignatti wrote:
> >> Hi,
> >>
> >> AFAIK, the existing interface in libpciaccess to enable a device
> >> (pci_device_enable) deals always with I/O _and_ memory resources. But
> >> I'm confused with the behavior of such interface because it's not
> >> working as I expected. For me it has to be equivalent to do the
> >> following, in the regs configuration space:
> >>
> >> ctrl = (PCI_COMMAND_IO | PCI_COMMAND_MEMORY);
> >> pci_device_cfg_write_u32(dev, ctrl, PCI_COMMAND);
> >>
> >>
> >> Isn't it? But it's not happening that. When I call pci_device_enable (or
> >> just `echo 1 > enable` in device) the kernel sometimes sets only the
> >> PCI_COMMAND_MEMORY bit or simply does nothing. What am I missing here?
> >>
> >> Attached, I'm sending a code that I'm using to play with this.
> >
> > Its not for that.
> >
> > Twiddling enable bits from userspace isn't something we want to be able
> > to do.
>
> So what's the intention of the enable field in sysfs?
>
> What I want in the end is to build an interface inside pci library to
> enable/disable a given resource of a device. This is what we were doing
> in Xorg (sigh) and what we progressively can move out to libpciaccess to
> build (I expected in a near future) the "system-wide PCI access control".
The enable field is to let you *enable* cards that haven't been yet.
This is just so secondary cards MMIO ranges are enabled. However it
won't disable anything for you ever.
Machines boot with the secondary disabled, this just lets you enable it,
and generally once enabled you can read out the ROM at least.
You are not allowed enable/disable PCI device resources from X.org. This
isn't the X servers job at all ever again.
Start to think of X as a non-priv process and design things accordingly.
Dave.
More information about the xorg-devel
mailing list