[U-Boot] [PATCH v3 1/6] powerpc/ppc4xx: Use generic accessor functions for gdsys FPGA
Wolfgang Denk
wd at denx.de
Tue Jun 11 21:51:17 CEST 2013
Dear dirk.eibach at gdsys.cc,
In message <1370959364-28943-2-git-send-email-dirk.eibach at gdsys.cc> you wrote:
> From: Dirk Eibach <eibach at gdsys.de>
>
> A set of accessor functions was added to be able to access not only
> memory mapped FPGA in a generic way.
>
> Thanks to Wolfgang Denk for getting this sorted properly.
Sorry, I still have comments...
> +#ifdef CONFIG_SYS_FPGA_NO_RFL_HI
> + FPGA_GET_REG(k, reflection_low, &val);
> +#else
> + FPGA_GET_REG(k, reflection_high, &val);
> +#endif
Can this #ifdef here (and similar below) not be avoided by defining a
proper value to some macro and using this as function argument instead?
> diff --git a/board/gdsys/405ep/dlvision-10g.c b/board/gdsys/405ep/dlvision-10g.c
> index 644493b..332d82f 100644
> --- a/board/gdsys/405ep/dlvision-10g.c
> +++ b/board/gdsys/405ep/dlvision-10g.c
...
> +struct ihs_fpga *fpga_ptr[] = CONFIG_SYS_FPGA_PTR;
> +
> +int fpga_set_reg(u32 fpga, u16 *reg, off_t regoff, u16 data)
> +{
> + out_le16(reg, data);
> +
> + return 0;
> +}
> +
> +int fpga_get_reg(u32 fpga, u16 *reg, off_t regoff, u16 *data)
> +{
> + *data = in_le16(reg);
> +
> + return 0;
> +}
...
> diff --git a/board/gdsys/405ep/io.c b/board/gdsys/405ep/io.c
> index 070dcbb..05707c4 100644
> --- a/board/gdsys/405ep/io.c
> +++ b/board/gdsys/405ep/io.c
> @@ -53,6 +53,22 @@ enum {
> HWVER_122 = 3,
> };
>
> +struct ihs_fpga *fpga_ptr[] = CONFIG_SYS_FPGA_PTR;
> +
> +int fpga_set_reg(u32 fpga, u16 *reg, off_t regoff, u16 data)
> +{
> + out_le16(reg, data);
> +
> + return 0;
> +}
> +
> +int fpga_get_reg(u32 fpga, u16 *reg, off_t regoff, u16 *data)
> +{
> + *data = in_le16(reg);
> +
> + return 0;
> +}
...
> diff --git a/board/gdsys/405ep/iocon.c b/board/gdsys/405ep/iocon.c
> index 0fc7db2..a531e5d 100644
> --- a/board/gdsys/405ep/iocon.c
> +++ b/board/gdsys/405ep/iocon.c
> @@ -69,6 +69,22 @@ enum {
> RAM_DDR2_32 = 0,
> };
>
> +struct ihs_fpga *fpga_ptr[] = CONFIG_SYS_FPGA_PTR;
> +
> +int fpga_set_reg(u32 fpga, u16 *reg, off_t regoff, u16 data)
> +{
> + out_le16(reg, data);
> +
> + return 0;
> +}
> +
> +int fpga_get_reg(u32 fpga, u16 *reg, off_t regoff, u16 *data)
> +{
> + *data = in_le16(reg);
> +
> + return 0;
> +}
We have the very same code repeated 3 times aready here, and two more
times follow further down. Please factor out this common code so we
have a single copy only.
Also, this does not handle the non-memory-mapped case (for fpga == 0) ?
> @@ -230,17 +249,21 @@ int last_stage_init(void)
> */
> void fpga_gpio_set(int pin)
> {
> - out_le16((void *)(CONFIG_SYS_FPGA0_BASE + 0x18), pin);
> + FPGA_SET_REG(0, gpio.set, pin);
> }
>
> void fpga_gpio_clear(int pin)
> {
> - out_le16((void *)(CONFIG_SYS_FPGA0_BASE + 0x16), pin);
> + FPGA_SET_REG(0, gpio.clear, pin);
> }
>
> int fpga_gpio_get(int pin)
> {
> - return in_le16((void *)(CONFIG_SYS_FPGA0_BASE + 0x14)) & pin;
> + u16 val;
> +
> + FPGA_GET_REG(0, gpio.read, &val);
> +
> + return val & pin;
> }
Do you really have to keep these fpga_gpio_set() / fpga_gpio_clear() /
fpga_gpio_get() functions? Can you not fix the related code to use
FPGA_GET_REG() directly?
> @@ -282,7 +288,7 @@ static int osd_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> {
> unsigned screen;
>
> - for (screen = 0; screen < CONFIG_SYS_OSD_SCREENS; ++screen) {
> + for (screen = 0; screen <= max_osd_screen; ++screen) {
This looks like an unrelated change. Is it intentionally included
here?
...
> - out_le16(&osd->xy_size, ((32 - 1) << 8) | (16 - 1));
> - out_le16(&osd->x_pos, 0x007f);
> - out_le16(&osd->y_pos, 0x005f);
> + if (screen > max_osd_screen)
> + max_osd_screen = screen;
Ditto here?
> @@ -386,7 +396,7 @@ int osd_write(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> {
> unsigned screen;
>
> - for (screen = 0; screen < CONFIG_SYS_OSD_SCREENS; ++screen) {
> + for (screen = 0; screen <= max_osd_screen; ++screen) {
And here?
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Do not simplify the design of a program if a way can be found to make
it complex and wonderful.
More information about the U-Boot
mailing list