[U-Boot] [PATCH] inka4x0: Add hardware diagnosis functions for inka4x0
Wolfgang Denk
wd at denx.de
Wed Mar 25 20:07:15 CET 2009
Dear Detlev & Kumar,
In message <m2ljqtr68m.fsf at ohwell.denx.de> you wrote:
>
...
> >> + /* reset PSC */
> >> + psc->command = PSC_SEL_MODE_REG_1;
> >
> > Should we not use accessor function to access the device registers
> > (here and in the following code) ?
>
> Indeed we should. But here we go, I can understand, why this wasn't
> done the first time around. The new code looks like this:
>
> /* reset PSC */
> out_8(&psc->command, PSC_SEL_MODE_REG_1);
>
> /* select clock sources */
>
> out_be16(&psc->psc_clock_select, 0);
> baseclk = (gd->ipb_clk + 16) / 32;
>
> /* switch to UART mode */
> out_be32(&psc->sicr, 0);
...
> Look at the wonderful mix of out_{8,be16,be32}. What a heart refreshing
> break from the monotonic coding routine :(
Indeed, what a mess, especially given the fact that these are all 32
bit registers, or am I wrong?
> Actully this is due to to mpc5xxx.h:
>
> struct mpc5xxx_psc {
> volatile u8 mode; /* PSC + 0x00 */
> volatile u8 reserved0[3];
> union { /* PSC + 0x04 */
> volatile u16 status;
> volatile u16 clock_select;
> } sr_csr;
> #define psc_status sr_csr.status
> #define psc_clock_select sr_csr.clock_select
> volatile u16 reserved1;
> volatile u8 command; /* PSC + 0x08 */
> volatile u8 reserved2[3];
> union { /* PSC + 0x0c */
> volatile u8 buffer_8;
> volatile u16 buffer_16;
> volatile u32 buffer_32;
> } buffer;
> #define psc_buffer_8 buffer.buffer_8
> #define psc_buffer_16 buffer.buffer_16
> #define psc_buffer_32 buffer.buffer_32
> union { /* PSC + 0x10 */
> volatile u8 ipcr;
> volatile u8 acr;
> } ipcr_acr;
> #define psc_ipcr ipcr_acr.ipcr
> #define psc_acr ipcr_acr.acr
> volatile u8 reserved3[3];
> union { /* PSC + 0x14 */
> volatile u16 isr;
> volatile u16 imr;
> } isr_imr;
>
>
> Git-blame points the finger to someone called 'wd'. Maybe he knows
> about the advantages of such structure definitions?
Sorry, I don;t. I'm pretty sure that I didn't write that code.
> On second check the corresponding header file in Linux (mpc52xx_uart.h) has
> stuff like this introduced by Kumar Gala, maybe he can enlighten me?
>
> To be honest, I wouldn't even dare accessing memory mapped registers in
> the non-native size, but maybe I'm missing something here.
Kumar, do you have any explanation for this strange design?
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Die meisten Menschen pflegen im Kindesalter vom Zeigen auf Gegenstän-
de (Mausbewegung) und "ga" sagen (Mausklick) abzukommen, zugunsten
eines mächtigeren und langwierig zu erlernenden Tools (Sprache).
-- Achim Linder in de.comp.os.linux.misc
More information about the U-Boot
mailing list