_extending_ platform support options?
Hi all,
currently I'm wondering what the preferred/recommend way of _extending_ an existing "Platform support" option is?
We are working with custom design/boards based on Virtex4/5. So we are primarily using the
CONFIG_XILINX_VIRTEX*_GENERIC_BOARD options. In our case we have some special needs,
like custom ppc_md.restart(), ppc_md.power_off() or ppc_md.show_cpuinfo().
Till now, we just duplicated arch/powerpc/platforms/4?x/virtex.c and added our special stuff. Properly renaming everything, etc ...
An alternative could be to add a virtex_my.c which extends virtex.c, like this (also like virtex_ml510.c extends virtex.c):
static void virtex_my_show_cpuinfo(struct seq_file *m)
{
seq_printf(m, something);
}static int __init virtex_mle_init(void)
{
ppc_md.show_cpuinfo = virtex_my_show_cpuinfo;
return 0;
}machine_core_initcall(virtex, virtex_my_init);
Though, to me, it does not seem really OK to assign ppc_md members that way. The original struct machdep for "virtex" (which is defined in virtex.c with define_machine()) is not adjusted either. Ok, we could modify that one, too. Especially I'm not sure if it is OK to use machine_core_initcall() for such modifications.
So my question is: Is there any recommended way for doing such "extensions"? Or is it OK to just duplicate virtex.c (which does not seem really OK, too)?
Thanks,
Joachim
Quoted 34 lines · Joachim Foerster
Hi all,
currently I'm wondering what the preferred/recommend way of _extending_ an existing "Platform support" option is?
We are working with custom design/boards based on Virtex4/5. So we are primarily using the CONFIG_XILINX_VIRTEX*_GENERIC_BOARD options. In our case we have some special needs, like custom
ppc_md.restart(),ppc_md.power_off()orppc_md.show_cpuinfo().Till now, we just duplicated arch/powerpc/platforms/4?x/virtex.c and added our special stuff. Properly renaming everything, etc ...
An alternative could be to add a
virtex_my.cwhich extendsvirtex.c, like this (also likevirtex_ml510.cextendsvirtex.c):static void
virtex_my_show_cpuinfo(struct seq_file *m){ seq_printf(m, something); }static int
__initvirtex_mle_init(void){ ppc_md.show_cpuinfo = virtex_my_show_cpuinfo; return 0; }
machine_core_initcall(virtex, virtex_my_init);Though, to me, it does not seem really OK to assign
ppc_mdmembers
that way. The original struct machdep for "virtex" (which is defined
invirtex.cwithdefine_machine()) is not adjusted either. Ok, we
could modify that one, too.
Especially I'm not sure if it is OK to usemachine_core_initcall()for such modifications.
Quoted 3 lines
So my question is: Is there any recommended way for doing such "extensions"? Or is it OK to just duplicate
virtex.c(which does not seem really OK, too)?
Duplicate it as you have done, naming the file something unique. We try to prevent unnecessary duplication of code, but sometimes it's cleaner to just have a separate board file instead.
josh
Quoted 7 lines · Josh Boyer
Quoted 5 lines
Though, to me, it does not seem really OK to assign
ppc_mdmembers that way. The original struct machdep for "virtex" (which is defined invirtex.cwithdefine_machine()) is not adjusted either. Ok, we could modify that one, too.
Especially I'm not sure if it is OK to usemachine_core_initcall()for such modifications.
Quoted 1 line
Quoted 8 lines
Quoted 3 lines
So my question is: Is there any recommended way for doing such "extensions"? Or is it OK to just duplicate
virtex.c(which does not seem really OK, too)?Duplicate it as you have done, naming the file something unique. We try
to prevent unnecessary duplication of code, but sometimes it's cleaner to just have a separate board file instead.
Right. Best way is to turn the common code in virtex.c into "library" code that you can hookup from your platform's ppc_md, so you avoid duplication that way for most things.
You an do that by just linking in virtex.c and changing the stuff you want to be non-static, or better if that becomes a habit, separate virtex-lib.c (for example) from virtex-simple.c (generic platform for example). You don't have to follow my proposed names :-)
Cheers,
Ben.