From: Dirk Eibach <dirk.eibach@gdsys.cc>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 06/10] powerpc/ppc4xx: Use generic FPGA accessors on all gdsys 405ep/ex boards
Date: Wed, 15 May 2013 11:23:59 +0200 [thread overview]
Message-ID: <0e4604dcfff89a1bd2b7f144a5b3ceae@gdsys.cc> (raw)
In-Reply-To: <20130508101333.6DDB438119E@gemini.denx.de>
Hello Wolfgang,
sorry for the delay, I had to clean some other things on my ToDoList.
I cleaned up my patchseries and wanted to start implementing your
proposal. And ran into a problem. Remember, the basic reason for the the
generic FPGA accessors was, that we have a certain amount of basically
identical FPGAs which are only connected to the CPU in different ways.
The drivers accessing those FPGAs should be agnostic of that and simply
be able to access those FPGAs by index.
> It appears you need both the element address and the offset in your
> fpga_set_reg() code, so you should pass this information, like that
> [note that we no longer need an array of addresses]:
>
> struct ihs_fpga fpga_ptr = (struct ihs_fpga *)CONFIG_SYS_FPGA_BASE;
> ...
>
> void fpga_set_reg(u32 fpga, u16 *reg, off_t regoff, u16 data)
> {
> if (fpga)
> return mclink_send(fpga - 1, regoff, data);
>
> return out_le16(reg, data);
> }
>
>> where mclink_send() is the routine to access the non memory mapped
>> FPGAs through the memory mapped FPGA:
>> int mclink_send(u8 slave, u16 addr, u16 data)
>> {
>> ...
>> fpga_set_reg(0, &system_fpgas[0].mc_tx_address, addr);
>> fpga_set_reg(0, &system_fpgas[0].mc_tx_data, data);
>> fpga_set_reg(0, &system_fpgas[0].mc_tx_cmd, (slave & 0x03) << 14);
>> }
>
> And this becomes:
>
> fpga_set_reg(0,
> &fpga_ptr->mc_tx_address,
> offsetof(struct ihs_fpga, mc_tx_address),
> addr);
>
> etc. Yes, this is long and ugly to write, so you may want to define a
> helper macro like:
>
> #define FPGA_SET_REG(ix,fld,val) \
> fpga_set_reg((ix), \
> &fpga_ptr->fld, \
> offsetof(struct ihs_fpga, fld), \
> val)
>
> so this turns into a plain and simple
>
> FPGA_SET_REG(0, mc_tx_address, addr);
> FPGA_SET_REG(0, mc_tx_data, data);
> FPGA_SET_REG(0, mc_tx_cmd, (slave & 0x03) << 14);
This works nicely for our memory mapped FPGA. But how about the other
FPGAs? I don't have a fpga_ptr for them. Setting it NULL would make
FPGA_SET_REG dereference a NULL pointer.
Certainly I might call
fpga_set_reg(1,
NULL,
offsetof(struct ihs_fpga, mc_tx_address),
addr);
but that would not be generic any more.
Do you have any idea how to solve this?
Cheers
Dirk
next prev parent reply other threads:[~2013-05-15 9:23 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-06 13:35 [U-Boot] [PATCH v2 0/10] Update gdsys ppc4xx-based boards dirk.eibach at gdsys.cc
2013-05-06 13:35 ` [U-Boot] [PATCH v2 01/10] powerpc/ppc4xx: Add generic accessor functions for gdsys FPGA dirk.eibach at gdsys.cc
2013-05-06 14:01 ` Wolfgang Denk
2013-05-06 14:02 ` Wolfgang Denk
2013-05-06 13:35 ` [U-Boot] [PATCH v2 02/10] powerpc/ppc4xx: Add gdsys mclink interface dirk.eibach at gdsys.cc
2013-05-06 13:35 ` [U-Boot] [PATCH v2 03/10] powerpc/ppc4xx: Add fpgad command for dumping gdsys fpga registers dirk.eibach at gdsys.cc
2013-05-06 13:35 ` [U-Boot] [PATCH v2 04/10] powerpc/ppc4xx: Use generic FPGA accessors in gdsys common code dirk.eibach at gdsys.cc
2013-05-06 14:07 ` Wolfgang Denk
2013-05-06 14:57 ` Tom Rini
2013-05-06 15:02 ` Dirk Eibach
2013-05-06 15:09 ` Tom Rini
2013-05-06 15:51 ` Dirk Eibach
2013-05-06 13:35 ` [U-Boot] [PATCH v2 05/10] powerpc/ppc4xx: Support gdsys multichannel iocon hardware dirk.eibach at gdsys.cc
2013-05-06 14:12 ` Wolfgang Denk
2013-05-06 14:16 ` Dirk Eibach
2013-05-06 15:18 ` Wolfgang Denk
2013-05-06 15:49 ` Dirk Eibach
2013-05-06 19:15 ` Wolfgang Denk
2013-05-06 19:31 ` Joe Hershberger
2013-05-06 13:35 ` [U-Boot] [PATCH v2 06/10] powerpc/ppc4xx: Use generic FPGA accessors on all gdsys 405ep/ex boards dirk.eibach at gdsys.cc
2013-05-06 14:10 ` Wolfgang Denk
2013-05-06 14:50 ` Dirk Eibach
2013-05-06 15:22 ` Wolfgang Denk
2013-05-06 15:55 ` Dirk Eibach
2013-05-06 19:23 ` Wolfgang Denk
2013-05-07 8:32 ` Dirk Eibach
2013-05-07 11:36 ` Wolfgang Denk
2013-05-07 12:08 ` Dirk Eibach
2013-05-07 19:18 ` Wolfgang Denk
2013-05-07 20:45 ` Dirk Eibach
2013-05-08 10:13 ` Wolfgang Denk
2013-05-08 11:17 ` Dirk Eibach
2013-05-08 15:37 ` Wolfgang Denk
2013-05-15 9:23 ` Dirk Eibach [this message]
2013-05-28 7:39 ` Dirk Eibach
2013-05-28 7:47 ` Dirk Eibach
2013-05-28 11:47 ` Wolfgang Denk
2013-05-06 13:35 ` [U-Boot] [PATCH v2 07/10] powerpc/ppc4xx: Fixup phy erratum on gdsys iocon hardware dirk.eibach at gdsys.cc
2013-05-06 13:35 ` [U-Boot] [PATCH v2 08/10] powerpc/ppc4xx: Increase timeout for gdsys mclink bus startup dirk.eibach at gdsys.cc
2013-05-06 13:35 ` [U-Boot] [PATCH v2 09/10] powerpc/ppc4xx: Consider gdsys FPGA OSD size dirk.eibach at gdsys.cc
2013-05-06 13:35 ` [U-Boot] [PATCH v2 10/10] powerpc/ppc4xx: Remove CONFIG_SYS_FLASH_PROTECTION from gdsys boards dirk.eibach at gdsys.cc
2013-05-06 14:03 ` [U-Boot] [PATCH v2 0/10] Update gdsys ppc4xx-based boards Wolfgang Denk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0e4604dcfff89a1bd2b7f144a5b3ceae@gdsys.cc \
--to=dirk.eibach@gdsys.cc \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox