On 1 March 2016 at 10:36, Leif Lindholm leif.lindholm@linaro.org wrote:
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.
Well, the problem is not what they are called, it is what the refmanual of the IP block explicitly states its value can be expected to be.
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...
As I said, I don't care deeply. If part and manufacturer is sufficient, then let's drop the other bits