On Tue, Mar 01, 2016 at 09:39:18AM +0100, Ard Biesheuvel wrote:
As far as the Primecell ID is concerned, let's just whitelist whatever TC2 exposes, even if in error.
You mean rather than mask the "stuck bit", specifically check if the register is 0 or 2? (Where 2 is added as a #define to the header).
I don't care deeply either way, but supporting the documented and the actual ID explicitly seems more correct, unless the difference is in the revision field?
So ... PeriphID3 holds the "Configuration" bits, so in any case, they would be irrelevant for identification.
We really should macroise this up a bit better, like Linux does: /* Some drivers don't use the struct amba_device */ #define AMBA_CONFIG_BITS(a) (((a) >> 24) & 0xff) #define AMBA_REV_BITS(a) (((a) >> 20) & 0x0f) #define AMBA_MANF_BITS(a) (((a) >> 12) & 0xff) #define AMBA_PART_BITS(a) ((a) & 0xfff)
#define amba_config(d) AMBA_CONFIG_BITS((d)->periphid) #define amba_rev(d) AMBA_REV_BITS((d)->periphid) #define amba_manf(d) AMBA_MANF_BITS((d)->periphid) #define amba_part(d) AMBA_PART_BITS((d)->periphid)
(after proper extraction of the 32-bit value from the 4 registers of course)
Amusingly, the Linux driver ignores pretty much everything, and accepts any primecell with ARM as designer. Opens up for cute devicetree hacks, I guess...
/ Leif