[U-Boot] [PATCH 1/2] i.MX28: Fix ref_cpu clock setup
Robert Deliën
robert at delien.nl
Fri Feb 3 15:00:26 CET 2012
> Awesome. So after reading your replies, let's just rename mx28_reg to
> mx28_reg_32 and introduce mx28_reg_8 for this particular problem.
You were probably already foreseeing this when you made your
suggestion to use accessors, but now I'm working it I see introducing
mx28_reg_8 may get too messy. The 4 byte-parts (name, name_set,
name_clr and name_tog) of one register-set (cpu) are interleaved with
the next set (emi), like this:
uint8_t hw_clkctrl_frac0_cpu;
uint8_t hw_clkctrl_frac0_emi;
uint8_t hw_clkctrl_frac0_io1;
uint8_t hw_clkctrl_frac0_io0;
uint8_t hw_clkctrl_frac0_cpu_set;
uint8_t hw_clkctrl_frac0_emi_set;
uint8_t hw_clkctrl_frac0_io1_set;
uint8_t hw_clkctrl_frac0_io0_set;
uint8_t hw_clkctrl_frac0_cpu_clr;
uint8_t hw_clkctrl_frac0_emi_clr;
uint8_t hw_clkctrl_frac0_io1_clr;
uint8_t hw_clkctrl_frac0_io0_clr;
uint8_t hw_clkctrl_frac0_cpu_tog;
uint8_t hw_clkctrl_frac0_emi_tog;
uint8_t hw_clkctrl_frac0_io1_tog;
uint8_t hw_clkctrl_frac0_io0_tog;
So this won't work due to overlap:
#define __mx28_reg_8(name) \
uint8_t name; \
uint8_t name##_set; \
uint8_t name##_clr; \
uint8_t name##_tog;
Instead I'd have to drop the byte-part names (cpu, emi, io1 and io0)
and replace them with more generic names like b0 and b1 for byte 0
and 1, and declare them all at once, like this:
#define __mx28_reg_8(name) \
uint8_t name##_b0; \
uint8_t name##_b1; \
uint8_t name##_b2; \
uint8_t name##_b3; \
uint8_t name##_b0_set; \
uint8_t name##_b1_set; \
uint8_t name##_b2_set; \
uint8_t name##_b3_set; \
uint8_t name##_b0_clr; \
uint8_t name##_b1_clr; \
uint8_t name##_b2_clr; \
uint8_t name##_b3_clr; \
uint8_t name##_b0_tog; \
uint8_t name##_b1_tog; \
uint8_t name##_b2_tog; \
uint8_t name##_b3_tog;
Besides b0 and b1 being confusing in endianity context, it's not a
pretty solution.
I'm going to try a couple of different things now, to find the least-
ugly solution if I can't find a pretty one.
More information about the U-Boot
mailing list