Hi Kevin, See inline.
Thanks Sneha > -----Original Message----- > From: Kevin Hilman [mailto:[EMAIL PROTECTED] > Sent: Friday, November 07, 2008 9:00 PM > To: Narnakaje, Snehaprabha > Cc: Rajashekhara, Sudhakar; Paulraj, Sandeep; Subrahmanya, Chaithrika; > davinci-linux-open-source@linux.davincidsp.com > Subject: Re: staging tree for dm6467 and dm355 support > > "Narnakaje, Snehaprabha" <[EMAIL PROTECTED]> writes: > > > Kevin, > > > > Looks like you have made good progress on getting the GIT more > > active. Thanks a lot for pushing the patches into the staging area. > > > > Regarding the base address definitions across DaVinci series of > >devices, I am trying to summarize the changes and raise concern for > >some of them: > > Thank you for reviewing these changes. > > To summarize my overarcing goal here: the main purpose is to move all > the board/chip specific settings (like base addresses) into board/chip > specific code. Drivers should NEVER be using base addresses directly > (like davinci_nand currently does.) Rather, board/chip code should be > filling out platform_data structs and passing them into the driver. > This allows the same driver to work across multiple platforms. I agree with you on not having/using base addresses directly in the driver. I have a related question though. Currently we have some of the platform_data structures defined in board-evm file (e.g. NAND, NOR and ATA) and the rest in devices.c. Should all be defined in devices.c? > > > 1. Currently AEMIF Data CE base addresses are defined in the > > arch/arm/mach-davinci/include/mach/hardware.h file. These addresses > > are the same for DM644x, DM355 and DM365. However they are different > > for DM6467. How do we then share and use these base addresses across > > DaVinci devices? > > OK, this is what I was worried about. I wasn't sure about those and > that's why were left in hardware.h. I now have updated docs for > 6446, 6447 and 355, but not yet for 365 so I will go back over those. > > Basically, the more devices there are, the less likely that any of the > base addresses will be common. > > In the end, I think hardware.h may be very sparse, and most things > defined in <device>.h. > > What remains is whether to come up with a strategy of how to name > things that are common between some devices but not others, or just > duplicate them them across each <device>.h with a different <DEVICE>_ > prefix. It makes a little more init code because there will more 'if > cpu_is_foo()' statements, but that doesn't bother me much. In fact, > it will probably be more readable. > > > 2. PLL base address is defined and used in > > arch/arm/mach-davinci/clock.c > > > > 3. DMA base address is defined and used in arch/arm/mach-davinci/dma.c > > > > 4. GPIO base address is defined in > > arch/arm/mach-davinci/include/mach/gpio.h Why do I see the same > > header file in include/asm-arm/arch/davinci/ (others like serial.h > > and system.h are also in both the locations) > > Hmm, include/asm-arm/arch-davinci is the old location and should be > empty. I will delete those. This is a remnant of the 2.6.27 merge > which look like I didn't quite finish cleaning up. > > > 5. System module and ATA base addresses are defined in > > arch/arm/mach-davinci/include/mach/hardware.h. This should be OK, as > > System module base address is the same across all DaVinci > > devices. ATA base address is also common across DM644x and DM646x. > > OK, than ATA base should be moved from hardware.h into each > <device>.h and the init code updated. > > > 6. INTC base address in arch/arm/mach-davinci/include/mach/irqs.h; > > DDR and IRAM base addresses in > > arch/arm/mach-davinci/include/mach/memory.h; PSC base address in > > arch/arm/mach-davinci/psc.c; Timer base addresses in > > arch/arm/mach-davinci/time.c and USB base address in > > arch/arm/mach-davinci/usb.c. This should OK, as they are same across > > all devices. > > > 7. UART base addresses for DaVinci are defined in > > arch/arm/mach-davinci/include/mach/serial.h. But we also have a > > DM355 specific definition (UART2) in > > arch/arm/mach-davinci/serial.c. Should we be generalizing this and > > keeping them in one single header file? > > I originally wanted to move them all into serial.c, but the early boot > and uncompress code uses UART0 and so needs that header. > > I think these can stay in serial.h for now, but the DM355 one > should probably be moved from serial.c into dm355.h. > > > 8. McBSP base addresses for DaVinci are defined > > arch/arm/mach-davinci/include/mach/mcbsp.h. These definitions are > > different for these EVMs. So should we be defining mcbsp_dm644x.h > > mcbsp_dm355.h and so on? > > Actually, these should just go into <device>.h instead of mcbsp_<device>.h > > The current location of this to mcbsp.h was just until someone fixes > the ASoC driver. There is lots of board/chip specific code in > sound/soc/davinci and it should be moved into board-*.c files. Once > that is done, then the board-* files will include <device>.h files, > fill out the platform_data and pass it into ASoC. > > > 9. All other peripheral (or device driver) specific base addresses > > are defined in arch/arm/mach-davinci/devices.c. Some of the base > > addresses are same across DaVinci devices, but some are different > > (e.g. EMAC base address is same for DM644x and DM646x, but different > > for DM365). It is true for other peripherals such as MMC/SD and SPI. > > OK, then the thing to do here is move these defines into <device>.h > files. Then devices.c will have to include each <device>.h and then > use cpu_is_* at runtime and figure out which base address to use. > > Thanks again for your review, > > I'll work more on this rework next week. Let us know, if there is anything we can do to help you out. > > Kevin > > > >> -----Original Message----- > >> From: davinci-linux-open-source- > >> [EMAIL PROTECTED] [mailto:davinci-linux- > >> [EMAIL PROTECTED] On Behalf > Of > >> Kevin Hilman > >> Sent: Thursday, November 06, 2008 9:06 PM > >> To: Rajashekhara, Sudhakar; Paulraj, Sandeep; Subrahmanya, Chaithrika > >> Cc: davinci-linux-open-source@linux.davincidsp.com > >> Subject: staging tree for dm6467 and dm355 support > >> > >> Hello, > >> > >> While I review the dm6467 and dm355 patches, and prepare for an update > >> to newer kernels, I've created a temporary staging branch[1] where > >> I've applied the dm646x and dm355 patches. > >> > >> On top of that, I've added a small series of rework patches where I've > >> reworked how and where base addresses are defined, init functions are > >> declared. I'm very interested in your comments on this layout. > >> > >> Basically, what I've done is got rid of most of the base address > >> definitions as global defines. The remaining ones that need to global > >> and that are common to ALL chips in the family will live in > >> hardware.h. Ones that need to be global and are chip specific should > >> live in <chipname>.h > >> > >> Note that I said "need to be global". Most base address defines do > >> not need to be in a global header. They are only ever used in > >> chip/board specific init code to fill in platform_data which is then > >> passed to the driver. Drivers should _never_ be using base address > >> defines directly. > >> > >> I've compile and boot tested this kernel on dm6446, dm6467 and dm355. > >> > >> Kevin > >> > >> [1] See the 'tmp/staging branch in DaVinci git. > >> > >> http://source.mvista.com/git/?p=linux-davinci- > >> 2.6.git;a=shortlog;h=refs/heads/tmp/ti-staging > >> > >> _______________________________________________ > >> Davinci-linux-open-source mailing list > >> Davinci-linux-open-source@linux.davincidsp.com > >> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source _______________________________________________ Davinci-linux-open-source mailing list Davinci-linux-open-source@linux.davincidsp.com http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source