From: James Courtier-Dutton <James@superbug.co.uk>
To: Takashi Iwai <tiwai@suse.de>
Cc: ALSA development <alsa-devel@alsa-project.org>
Subject: Re: 20K1 PCI bars, and mode switching info.
Date: Tue, 21 Oct 2008 20:39:28 +0100 [thread overview]
Message-ID: <48FE2FF0.8070003@superbug.co.uk> (raw)
In-Reply-To: <s5h8wsjvz71.wl%tiwai@suse.de>
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
next prev parent reply other threads:[~2008-10-21 19:39 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-19 16:07 20K1 PCI bars, and mode switching info James Courtier-Dutton
2008-10-19 16:23 ` James Courtier-Dutton
2008-10-19 18:17 ` Vedran Miletić
2008-10-20 5:55 ` Takashi Iwai
[not found] ` <fd3eb9bf0810191116i549d5995ke05193a1344f6594@mail.gmail.com>
2008-10-19 19:18 ` James Courtier-Dutton
2008-10-20 5:54 ` Takashi Iwai
2008-10-20 8:02 ` Takashi Iwai
2008-10-20 18:34 ` James Courtier-Dutton
2008-10-20 19:33 ` Takashi Iwai
2008-10-21 19:39 ` James Courtier-Dutton [this message]
2008-10-22 5:50 ` Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=48FE2FF0.8070003@superbug.co.uk \
--to=james@superbug.co.uk \
--cc=alsa-devel@alsa-project.org \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.