Message ID | 1502861911-14366-4-git-send-email-bmeng.cn@gmail.com |
---|---|
State | Accepted |
Commit | b42711f90c66d683b808cd78d9748ab38407413f |
Delegated to: | Bin Meng |
Headers | show |
On 16.08.2017 07:38, Bin Meng wrote: > At present the ICH SPI opcode registers configuration is done in the > ich_spi_remove() routine, a little bit weird but that's how current. > Linux MTD driver works. This changes to move the opcode registers > configuration to a separate routine ich_spi_config_opcode() which > might be called by U-Boot itself as well. > > Signed-off-by: Bin Meng <bmeng.cn@gmail.com> > --- > > drivers/spi/ich.c | 22 ++++++++++++++++------ > 1 file changed, 16 insertions(+), 6 deletions(-) > > diff --git a/drivers/spi/ich.c b/drivers/spi/ich.c > index d4888f5..373bc26 100644 > --- a/drivers/spi/ich.c > +++ b/drivers/spi/ich.c > @@ -338,6 +338,21 @@ static int ich_status_poll(struct ich_spi_priv *ctlr, u16 bitmask, > return -ETIMEDOUT; > } > > +void ich_spi_config_opcode(struct udevice *dev) > +{ > + struct ich_spi_priv *ctlr = dev_get_priv(dev); > + > + /* > + * PREOP, OPTYPE, OPMENU1/OPMENU2 registers can be locked down > + * to prevent accidental or intentional writes. Before they get > + * locked down, these registers should be initialized properly. > + */ > + ich_writew(ctlr, SPI_OPPREFIX, ctlr->preop); > + ich_writew(ctlr, SPI_OPTYPE, ctlr->optype); > + ich_writel(ctlr, SPI_OPMENU_LOWER, ctlr->opmenu); > + ich_writel(ctlr, SPI_OPMENU_UPPER, ctlr->opmenu + sizeof(u32)); > +} > + > static int ich_spi_xfer(struct udevice *dev, unsigned int bitlen, > const void *dout, void *din, unsigned long flags) > { > @@ -585,16 +600,11 @@ static int ich_spi_probe(struct udevice *dev) > > static int ich_spi_remove(struct udevice *bus) > { > - struct ich_spi_priv *ctlr = dev_get_priv(bus); > - > /* > * Configure SPI controller so that the Linux MTD driver can fully > * access the SPI NOR chip > */ > - ich_writew(ctlr, SPI_OPPREFIX, ctlr->preop); > - ich_writew(ctlr, SPI_OPTYPE, ctlr->optype); > - ich_writel(ctlr, SPI_OPMENU_LOWER, ctlr->opmenu); > - ich_writel(ctlr, SPI_OPMENU_UPPER, ctlr->opmenu + sizeof(u32)); > + ich_spi_config_opcode(bus); > > return 0; > } > Reviewed-by: Stefan Roese <sr@denx.de> Thanks, Stefan
On Wed, Aug 16, 2017 at 2:19 PM, Stefan Roese <sr@denx.de> wrote: > On 16.08.2017 07:38, Bin Meng wrote: >> >> At present the ICH SPI opcode registers configuration is done in the >> ich_spi_remove() routine, a little bit weird but that's how current. >> Linux MTD driver works. This changes to move the opcode registers >> configuration to a separate routine ich_spi_config_opcode() which >> might be called by U-Boot itself as well. >> >> Signed-off-by: Bin Meng <bmeng.cn@gmail.com> >> --- >> >> drivers/spi/ich.c | 22 ++++++++++++++++------ >> 1 file changed, 16 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/spi/ich.c b/drivers/spi/ich.c >> index d4888f5..373bc26 100644 >> --- a/drivers/spi/ich.c >> +++ b/drivers/spi/ich.c >> @@ -338,6 +338,21 @@ static int ich_status_poll(struct ich_spi_priv *ctlr, >> u16 bitmask, >> return -ETIMEDOUT; >> } >> +void ich_spi_config_opcode(struct udevice *dev) >> +{ >> + struct ich_spi_priv *ctlr = dev_get_priv(dev); >> + >> + /* >> + * PREOP, OPTYPE, OPMENU1/OPMENU2 registers can be locked down >> + * to prevent accidental or intentional writes. Before they get >> + * locked down, these registers should be initialized properly. >> + */ >> + ich_writew(ctlr, SPI_OPPREFIX, ctlr->preop); >> + ich_writew(ctlr, SPI_OPTYPE, ctlr->optype); >> + ich_writel(ctlr, SPI_OPMENU_LOWER, ctlr->opmenu); >> + ich_writel(ctlr, SPI_OPMENU_UPPER, ctlr->opmenu + sizeof(u32)); >> +} >> + >> static int ich_spi_xfer(struct udevice *dev, unsigned int bitlen, >> const void *dout, void *din, unsigned long flags) >> { >> @@ -585,16 +600,11 @@ static int ich_spi_probe(struct udevice *dev) >> static int ich_spi_remove(struct udevice *bus) >> { >> - struct ich_spi_priv *ctlr = dev_get_priv(bus); >> - >> /* >> * Configure SPI controller so that the Linux MTD driver can fully >> * access the SPI NOR chip >> */ >> - ich_writew(ctlr, SPI_OPPREFIX, ctlr->preop); >> - ich_writew(ctlr, SPI_OPTYPE, ctlr->optype); >> - ich_writel(ctlr, SPI_OPMENU_LOWER, ctlr->opmenu); >> - ich_writel(ctlr, SPI_OPMENU_UPPER, ctlr->opmenu + sizeof(u32)); >> + ich_spi_config_opcode(bus); >> return 0; >> } >> > > Reviewed-by: Stefan Roese <sr@denx.de> applied to u-boot-x86, thanks!
diff --git a/drivers/spi/ich.c b/drivers/spi/ich.c index d4888f5..373bc26 100644 --- a/drivers/spi/ich.c +++ b/drivers/spi/ich.c @@ -338,6 +338,21 @@ static int ich_status_poll(struct ich_spi_priv *ctlr, u16 bitmask, return -ETIMEDOUT; } +void ich_spi_config_opcode(struct udevice *dev) +{ + struct ich_spi_priv *ctlr = dev_get_priv(dev); + + /* + * PREOP, OPTYPE, OPMENU1/OPMENU2 registers can be locked down + * to prevent accidental or intentional writes. Before they get + * locked down, these registers should be initialized properly. + */ + ich_writew(ctlr, SPI_OPPREFIX, ctlr->preop); + ich_writew(ctlr, SPI_OPTYPE, ctlr->optype); + ich_writel(ctlr, SPI_OPMENU_LOWER, ctlr->opmenu); + ich_writel(ctlr, SPI_OPMENU_UPPER, ctlr->opmenu + sizeof(u32)); +} + static int ich_spi_xfer(struct udevice *dev, unsigned int bitlen, const void *dout, void *din, unsigned long flags) { @@ -585,16 +600,11 @@ static int ich_spi_probe(struct udevice *dev) static int ich_spi_remove(struct udevice *bus) { - struct ich_spi_priv *ctlr = dev_get_priv(bus); - /* * Configure SPI controller so that the Linux MTD driver can fully * access the SPI NOR chip */ - ich_writew(ctlr, SPI_OPPREFIX, ctlr->preop); - ich_writew(ctlr, SPI_OPTYPE, ctlr->optype); - ich_writel(ctlr, SPI_OPMENU_LOWER, ctlr->opmenu); - ich_writel(ctlr, SPI_OPMENU_UPPER, ctlr->opmenu + sizeof(u32)); + ich_spi_config_opcode(bus); return 0; }
At present the ICH SPI opcode registers configuration is done in the ich_spi_remove() routine, a little bit weird but that's how current. Linux MTD driver works. This changes to move the opcode registers configuration to a separate routine ich_spi_config_opcode() which might be called by U-Boot itself as well. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> --- drivers/spi/ich.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-)