On 10/4/2010 3:47 PM, Wolfgang Denk wrote: > Dear Vipin Kumar, > Dear Wolfgang
> In message <4ca9a095.9000...@st.com> you wrote: >> >> I encountered a problem something like >> >> struct xyz { >> int x; >> int y; >> int z[CONST]; >> } __attribute__ ((packed)); >> >> struct xyz *abc; >> u32 * status_reg = (u32 *)&abc->z[0]; >> >> writel(status, status_reg); >> >> This writel results in writing byte by byte on the address pointed to by >> status_reg. >> This problem is visible with both gcc version 4.4.1 as well as 4.5.0 > > I bet this is on some ARM system? > Yes, it is on an ARM system (CortexA9). But I still feel that since I am creating a new u32 * status_reg, the code should not use any intelligence and use the pointer only to produce an str instruction in the form str r0, [r1] But it retains the packed property of the structure even with a new u32 ponter typecasted to u32 * u32 * status_reg = (u32 *)xyz->x; A writel to status_reg results in byte by byte writing >> Incidently, the same code works well with 4.2.4 > > ...which surprises me. I thought this has always been an ARM > "feature". > >> The problem is visible in the usb host driver which uses the packed >> structures for >> accessing device registers. > > Hm... Why do these structs have any "__attribute__ ((packed))" at all? > Even I could not understand that very well Regards Vipin > Best regards, > > Wolfgang Denk > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot