提交 b12b5458 编写于 作者: M Mario Six

gdsys: mpc8308: Use shadow register for output GPIO values

Since the gpio output status on MPC8xxx cannot be read back, it has to
be buffered locally.
Signed-off-by: NDirk Eibach <dirk.eibach@gdsys.cc>
Signed-off-by: NMario Six <mario.six@gdsys.cc>
上级 9c454827
......@@ -287,8 +287,8 @@ void mpc8308_setup_hw(void)
/*
* set "startup-finished"-gpios
*/
setbits_be32(&immr->gpio[0].dir, (BIT(31 - 11) | BIT(31 - 12)));
setbits_be32(&immr->gpio[0].dat, BIT(31 - 12));
setbits_be32(&immr->gpio[0].dir, BIT(31 - 11) | BIT(31 - 12));
setbits_gpio0_out(BIT(31 - 12));
}
int mpc8308_get_fpga_done(uint fpga)
......
......@@ -24,6 +24,25 @@
DECLARE_GLOBAL_DATA_PTR;
/* as gpio output status cannot be read back, we have to buffer it locally */
u32 gpio0_out;
void setbits_gpio0_out(u32 mask)
{
immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
gpio0_out |= mask;
out_be32(&immr->gpio[0].dat, gpio0_out);
}
void clrbits_gpio0_out(u32 mask)
{
immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
gpio0_out &= ~mask;
out_be32(&immr->gpio[0].dat, gpio0_out);
}
int get_fpga_state(uint dev)
{
return gd->arch.fpga_state[dev];
......
#ifndef __MPC8308_H_
#define __MPC8308_H_
void setbits_gpio0_out(u32 mask);
void clrbits_gpio0_out(u32 mask);
/* functions to be provided by board implementation */
void mpc8308_init(void);
void mpc8308_set_fpga_reset(unsigned state);
......
......@@ -343,7 +343,7 @@ void mpc8308_setup_hw(void)
* set "startup-finished"-gpios
*/
setbits_be32(&immr->gpio[0].dir, BIT(31 - 11) | BIT(31 - 12));
setbits_be32(&immr->gpio[0].dat, BIT(31 - 12));
setbits_gpio0_out(BIT(31 - 12));
}
int mpc8308_get_fpga_done(uint fpga)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册