[PATCH 4/9] arm/tegra: fuse: add functions to access chip revision

Olof Johansson olof at lixom.net
Wed Jan 4 18:36:28 EST 2012


On Wed, Jan 4, 2012 at 3:20 PM, Stephen Warren <swarren at nvidia.com> wrote:
> Olof Johansson wrote at Thursday, December 22, 2011 5:18 PM:
>> Add function to get chip revision, and print it out at boot time.
>>
>> Restructure the fuse access to just use cached variables instead
>> of always reading the fuses, and export those variables directly
>> instead of using accessor functions.
>>
>> Add a SKU ID table of currently known values.
>
>> +static enum tegra_revision tegra_get_revision(void)
>> +{
>> +     void __iomem *chip_id = IO_ADDRESS(TEGRA_APB_MISC_BASE) + 0x804;
>> +     u32 id = readl(chip_id);
>> +
>> +     switch ((id >> 16) & 0xf) {
>
> We probably should decode A01 too; I certainly had a Tegra30 A01 until
> recently, so it's entirely possible others do and want a meaningful
> result.

Ah yes, T30. I was thinking of T20/25 A01. I'll add it.

> Should the "A" should be decoded from the register too? It's bits 7:4
> of the register and IIRC, 0=??? 1=A, presumably 2=B etc.

Well, only A is documented in my TRM. :-)   I think it's safe to keep
it UNKNOWN until known.

>> +     case 2:
>> +             return TEGRA_REVISION_A02;
>> +     case 3:
>> +             if (get_spare_fuse(18) || get_spare_fuse(19))
>> +                     return TEGRA_REVISION_A03p;
>
> Does that apply equally to Tegra30 as well as Tegra20? I'm afraid I don't
> know, but if you need I can try and find out.

I doubt it, so it needs to be conditional. Will add.

>> +             else
>> +                     return TEGRA_REVISION_A03;
>> +     case 4:
>> +             return TEGRA_REVISION_A04;
>
> And there's space in the register for numbers higher than 4, although I
> don't think there's any current silicon where this would matter.

Same here, not necessarily need to allocate all that much more than
what's known to be needed.


-Olof



More information about the linux-arm-kernel mailing list