x86: ich-spi: Move opcode registers configuration to another routine
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> Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
		
							parent
							
								
									3e79141684
								
							
						
					
					
						commit
						b42711f90c
					
				|  | @ -338,6 +338,21 @@ static int ich_status_poll(struct ich_spi_priv *ctlr, u16 bitmask, | ||||||
| 	return -ETIMEDOUT; | 	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, | static int ich_spi_xfer(struct udevice *dev, unsigned int bitlen, | ||||||
| 			const void *dout, void *din, unsigned long flags) | 			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) | 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 | 	 * Configure SPI controller so that the Linux MTD driver can fully | ||||||
| 	 * access the SPI NOR chip | 	 * access the SPI NOR chip | ||||||
| 	 */ | 	 */ | ||||||
| 	ich_writew(ctlr, SPI_OPPREFIX, ctlr->preop); | 	ich_spi_config_opcode(bus); | ||||||
| 	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)); |  | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue