Re: 20K1 PCI bars, and mode switching info.

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

 



Takashi Iwai wrote:
> At Mon, 20 Oct 2008 19:34:39 +0100,
> James Courtier-Dutton wrote:
>> Takashi Iwai wrote:
>>> At Sun, 19 Oct 2008 17:07:08 +0100,
>>> James Courtier-Dutton wrote:
>>>> This info should help the current snd-sbxfi driver to actually work with
>>>> the "Vista compatible" cards that it currently does not work with.
>>>> I believe the true UAA to 20K1 mode switch code is missing from the
>>>> current alsa snd-sbxfi driver.
>>> The code to switch to 20k1 mode is already there.
>>> The sbxfi driver uses ioport for the access, and it looks like in BAR5
>>> for UAA boards.  This could be the problem...
>>>
>> Well I cannot find it. I can only find:
>> static void sbxfi_switch_xfi_mode(struct sbxfi *chip)
>> and that does not do the job.
> 
> Well, this is supposed to be (1), switching to 20k1 mode.
(1) is a config space switch, nothing else. It leaves the UAA chip in
control of the bus master.
> 
>> You need to do this:
>>
>>>> 2) UAA/20K1 MODE CHANGE (controls who the bus master is):
>>>> The "Mode Change" register is located in the UAA configuration space at
>>>> location offset 0x3FFC. This location stores 4 values in a ring.
>>>> To switch from 20K1 mode to UAA mode write each DW value: CTLA, CTLZ,
>>>> CTLL, CTLA.
>>>> To switch from UAA mode to 20K1 mode write each DW value: CTLX, CTL-,
>>>> CTLF, CTLi
>>>> To read the current mode, the 4 value ring may be in any position, so
>>>> one might read for example:
>>>> CTLL, CTLA, CTLA, CTLZ
> 
> Hm, but procedure this isn't in OSS driver, too.
> Doesn't OSS driver work with UAA boards?
I do not know. I do not have access to any of the X-Fi hardware at the
moment. I am just reading the datasheets and commenting. There is also
sample code that I received with the datesheeets.

Here is some pseudo code to explain the CTLX etc. values.

WriteMemory((bar0 + 0x00003ffc),0x43544c58);  // CTLX
WriteMemory((bar0 + 0x00003ffc),0x43544c2d);  // CTL-
WriteMemory((bar0 + 0x00003ffc),0x43544c46);  // CTLF
WriteMemory((bar0 + 0x00003ffc),0x43544c69);  // CTLi


> 
>>>> At power on, the card is in UAA mode.
>>>> In UAA mode, the UAA chip is the bus master.
>>>> In 20K1 mode, the 20K1 chip is the bus master.
>>>> Under either UAA mode or 20K1 mode, the driver can read and write the
>>>> configuration space of both UAA chip and 20K1 chip.
> 
> Doesn't it mean that 20k1 chip gets the bus master automatically
> when switch into 20k1 mode from UAA mode?
(1) is a config space switch and PCI IDs switch, nothing else. It leaves
the chip in UAA mode. (2) is the real mode change.

> 
> Anyway ,20k1 mode switching is a mess.  This may screw up also the
> internal room-keeping of struct pci.  Maybe we can't do it without
> switching but just master mode switch?
I agree that it is messy. I did not design the hardware. Maybe we need
to make a suggestion on LKML so that we can make a call that updates the
global kernel struct pci once we make the config space switch. I do not
think we need to switch back from 20K1 to UAA mode. We already have
hotplug for cardbus pccards, maybe we could use some of those calls.

Kind regards

James

_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux