Ah, ok. I see where I was getting confused. There doesn't look like there's any
way to disable a BAR or force it to a particular value, correct? In reality you
wouldn't force a BAR to a particular value you'd just work without it, but that
way the existing models won't have to be changed.

Gabe

Quoting Ali Saidi <[EMAIL PROTECTED]>:

> You should setup the BARs and the BAR sizes with the BARX and BARSizeX
> variables. If you set the BAR to 0x1 and the size to 1024, then you
> would get an 1024 byte I/O space when Linux reads the bar type, writes
> -1 to read the bar size, and then properly configures the device.
>
> Ali
>
>
>
> On Nov 24, 2008, at 9:50 PM, Gabe Black wrote:
>
> > I dug around in the lspci source a bit, and "[virtual]" means that the
> > OS has assigned a resource to a device but it doesn't appear in the
> > BARs. It shows up as the memory type because bit 0 of an
> > "unimplemented"
> > BAR is 0, but the address it prints is what the OS reports which
> > matches
> > with the legacy addresses. "[disabled]" shows up because the command
> > registers memory bit is 0, again because lspci is misinterpreting the
> > virtual regions as memory instead of IO. The final region of IO I'm
> > assuming is the BMI region in our controller model, and it -is-
> > actually
> > set up with its BAR.
> >
> > So the unresolved issue here is still how do I get M5 to do this? I
> > need
> > to be able to set up an IO BAR and to disable any particular BAR and
> > force an address in its place. If there's already a way to do this
> > then
> > please let me know. If not, I'll go ahead and cook one up.
> >
> > Gabe
> >
> > Gabe Black wrote:
> >>    I've been looking at the implementation of the PCI BAR registers,
> >> and I can't see how it's possible to set up an IO decoder. The lowest
> >> bit of the BAR is supposed to be a 1 for IO addresses, and the BARs
> >> are
> >> memset to 0 in the constructor. The only way to set them that I see
> >> is
> >> to write to the BARs, but that preserves what type it is so it can
> >> never
> >> change from memory to IO. Also, the thing that sets the range for the
> >> various devices just uses the address directly without masking that
> >> bit
> >> out. What it should do is mask it out, and if it was a 1 transform
> >> the
> >> rest to an IO address somehow. Also, there doesn't seem to be any
> >> way to
> >> disable BARs, or at least not that I see. I have the mindshare PCI
> >> book,
> >> and it says that for legacy IO decoders, like what I'm trying to
> >> get to
> >> work, the BAR is not implemented. I think that means reading it
> >> returns
> >> 0, but that part is a little fuzzy. The configuration software is
> >> supposed to then recognize that this is a legacy device and turn on
> >> it's
> >> IO decoders in the command register. There doesn't seem to be any
> >> way to
> >> set this sort of thing up in the IDE controller, although that's
> >> pretty
> >> understandable since Alpha probably doesn't expect devices to end
> >> up in
> >> fixed locations. On my system my IDE controller shows up under
> >> lspci as
> >> copied below. I'm not sure how to interpret all of it, but the
> >> "Memory"
> >> regions actually correspond to the IO locations the legacy
> >> controllers
> >> are supposed to be at. They're marked as "[disabled]" which matches
> >> the
> >> description of the legacy devices, but I don't know how it determined
> >> that. They're also marked as "[virtual]" and I have no idea what that
> >> means either, unless it has something to do with an IO MMU.
> >>
> >> 00:0d.0 IDE interface: nVidia Corporation MCP55 IDE (rev a1) (prog-
> >> if 8a
> >> [Master SecP PriP])
> >>        Subsystem: nVidia Corporation Device c55e
> >>        Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop-
> >> ParErr- Stepping- SERR- FastB2B- DisINTx-
> >>        Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort-
> >> <TAbort- <MAbort- >SERR- <PERR- INTx-
> >>        Latency: 0 (750ns min, 250ns max)
> >>        Region 0: [virtual] Memory at 000001f0 (32-bit,
> >> non-prefetchable) [disabled] [size=8]
> >>        Region 1: [virtual] Memory at 000003f0 (type 3,
> >> non-prefetchable) [disabled] [size=1]
> >>        Region 2: [virtual] Memory at 00000170 (32-bit,
> >> non-prefetchable) [disabled] [size=8]
> >>        Region 3: [virtual] Memory at 00000370 (type 3,
> >> non-prefetchable) [disabled] [size=1]
> >>        Region 4: I/O ports at ec00 [size=16]
> >>        Capabilities: [44] Power Management version 2
> >>                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
> >> PME(D0-,D1-,D2-,D3hot-,D3cold-)
> >>                Status: D0 PME-Enable- DSel=0 DScale=0 PME-
> >>        Kernel driver in use: AMD_IDE
> >>
> >> _______________________________________________
> >> m5-dev mailing list
> >> m5-dev@m5sim.org
> >> http://m5sim.org/mailman/listinfo/m5-dev
> >>
> >
> > _______________________________________________
> > m5-dev mailing list
> > m5-dev@m5sim.org
> > http://m5sim.org/mailman/listinfo/m5-dev
> >
>
> _______________________________________________
> m5-dev mailing list
> m5-dev@m5sim.org
> http://m5sim.org/mailman/listinfo/m5-dev
>




_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to