Hello experts,
I am wondering how to access registers correctly by usging structured
register definitions in TX4938 particularly.
Some time ago, Linus told "volatile" on a data structure as described
below,
http://www.ussg.iu.edu/hypermail/linux/kernel/0401.0/1387.html
In tx4938, every register access is done by using "volatile" like below.
include/asm-mips/tx4938/tx4938.h:
313 struct tx4938_ccfg_reg {
314 volatile unsigned long long ccfg;
^^^^^^^^
315 volatile unsigned long long crir;
316 volatile unsigned long long pcfg;
317 volatile unsigned long long tear;
arch/mips/tx4938/toshiba_rbtx4938/setup.c:
410 int __init tx4938_pciclk66_setup(void)
411 {
412 int pciclk;
413
414 /* Assert M66EN */
415 tx4938_ccfgptr->ccfg |= TX4938_CCFG_PCI66;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In order to remove "volatile" on data structure and fix the above situation, I
gues,
some functions are provided in header files:
1. "reg_rd08(r)" family
2. "TX4938_RD08(r)" family
3. "readb(r)" family
Could you tell me which is suitable for this situation?
For exmaple, if #"2" is applied, the code would become like below:
arch/mips/tx4938/toshiba_rbtx4938/setup.c:
433 int __init tx4938_pciclk66_setup(void)
434 {
435 int pciclk;
436 unsigned long long v;
437 /* Assert M66EN */
438 v = TX4938_RD64(&tx4938_ccfgptr->ccfg);
439 TX4938_WR64(&tx4938_ccfgptr->ccfg, v | TX4938_CCFG_PCI66);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Any information would be appreciated.
Hiroshi DOYU
|