diff mbox

[U-Boot,4/5] x86: ich-spi: Move opcode registers configuration to another routine

Message ID 1502861911-14366-4-git-send-email-bmeng.cn@gmail.com
State Accepted
Commit b42711f90c66d683b808cd78d9748ab38407413f
Delegated to: Bin Meng
Headers show

Commit Message

Bin Meng Aug. 16, 2017, 5:38 a.m. UTC
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(-)

Comments

Stefan Roese Aug. 16, 2017, 6:19 a.m. UTC | #1
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
Bin Meng Aug. 24, 2017, 3:17 a.m. UTC | #2
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 mbox

Patch

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;
 }