
Dear Reinhard Meyer,
In message 4C66F54D.2060701@emk-elektronik.de you wrote:
I was even thinking of something like
struct soc { u32 xyz[0x80]; /* XYZ unit */ u32 dbu[0x80]; /* Debug Unit */ u32 rstc[0x80]; /* Reset Controller */ and so on.
This is what PPC used to do; I like that - but ARM people always explained to me that it makes no sense because address space on ARM SoC is only sparely populated.
Even if, that's no reason, on can write "u32 spi0[0x1000]", on AT91 the spacing of peripherals is 0x4000 bytes, in fact it repeats times in its window. The system stuff is like one peripheral with its components spaced by 0x200 bytes (hence the 0x80 above).
I think we have a misunderstaning ehre - I thought the entries like "xyz" were indeed "u32" types - buut now I get the impression that what you have in mind is that they are actually structs describing hardware blocks.
Then it should be written like that.
For example, see file "arch/powerpc/include/asm/8xx_immap.h":
struct immap is what corresponds to your struct soc above.
Would the toolchain "gulp" when one defines the whole 4 GB that way?
Why not?
Best regards,
Wolfgang Denk