diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-07-09 13:01:00 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-07-23 16:25:13 +0200 |
commit | ca13a84ac2580d8507f292b469751a919af60411 (patch) | |
tree | 8cc52c2a7520bdd0d1f0b8c8175e4862503abc77 /drivers | |
parent | 66891566ccf72c19c3c25182f98eda4dc2a8ad3e (diff) | |
download | barebox-ca13a84ac2580d8507f292b469751a919af60411.tar.gz barebox-ca13a84ac2580d8507f292b469751a919af60411.tar.xz |
ARM: MXS: introduce stmp device support
MXS specific devices have some common infrastructure in the kernel
known as STMP devices. We have the same in barebox, but with a
mxs_ prefix instead of a stmp_ prefix. As some STMP devices are
also found on i.MX6 move the common infrastructure out of MXS
specific files and use the stmp_ prefix.
This is done in preparation for i.MX6 NAND support.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/dma/Kconfig | 1 | ||||
-rw-r--r-- | drivers/dma/apbh_dma.c | 24 | ||||
-rw-r--r-- | drivers/mci/mxs.c | 4 | ||||
-rw-r--r-- | drivers/mtd/nand/nand_mxs.c | 12 | ||||
-rw-r--r-- | drivers/serial/serial_auart.c | 2 | ||||
-rw-r--r-- | drivers/spi/mxs_spi.c | 27 | ||||
-rw-r--r-- | drivers/video/stm.c | 11 |
7 files changed, 42 insertions, 39 deletions
diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig index a30fa375d1..c43c93e032 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig @@ -3,6 +3,7 @@ menu "DMA support" config MXS_APBH_DMA tristate "MXS APBH DMA ENGINE" depends on ARCH_IMX23 || ARCH_IMX28 + select STMP_DEVICE help Experimental! endmenu diff --git a/drivers/dma/apbh_dma.c b/drivers/dma/apbh_dma.c index d30b8fb193..c8b20fbefe 100644 --- a/drivers/dma/apbh_dma.c +++ b/drivers/dma/apbh_dma.c @@ -20,12 +20,12 @@ #include <common.h> #include <malloc.h> #include <errno.h> +#include <stmp-device.h> #include <asm/mmu.h> #include <asm/io.h> #include <mach/clock.h> #include <mach/imx-regs.h> #include <mach/dma.h> -#include <mach/mxs.h> #define HW_APBHX_CTRL0 0x000 #define BM_APBH_CTRL0_APB_BURST8_EN (1 << 29) @@ -165,7 +165,7 @@ static int mxs_dma_enable(int channel) writel(pchan->active_num, apbh_regs + HW_APBHX_CHn_SEMA(channel)); channel_bit = channel + (apbh_is_old ? BP_APBH_CTRL0_CLKGATE_CHANNEL : 0); - writel(1 << channel_bit, apbh_regs + HW_APBHX_CTRL0 + BIT_CLR); + writel(1 << channel_bit, apbh_regs + HW_APBHX_CTRL0 + STMP_OFFSET_REG_CLR); } pchan->flags |= MXS_DMA_FLAGS_BUSY; @@ -202,7 +202,7 @@ static int mxs_dma_disable(int channel) return -EINVAL; channel_bit = channel + (apbh_is_old ? BP_APBH_CTRL0_CLKGATE_CHANNEL : 0); - writel(1 << channel_bit, apbh_regs + HW_APBHX_CTRL0 + BIT_SET); + writel(1 << channel_bit, apbh_regs + HW_APBHX_CTRL0 + STMP_OFFSET_REG_SET); pchan->flags &= ~MXS_DMA_FLAGS_BUSY; pchan->active_num = 0; @@ -226,10 +226,10 @@ static int mxs_dma_reset(int channel) if (apbh_is_old) writel(1 << (channel + BP_APBH_CTRL0_RESET_CHANNEL), - apbh_regs + HW_APBHX_CTRL0 + BIT_SET); + apbh_regs + HW_APBHX_CTRL0 + STMP_OFFSET_REG_SET); else writel(1 << (channel + BP_APBHX_CHANNEL_CTRL_RESET_CHANNEL), - apbh_regs + HW_APBHX_CHANNEL_CTRL + BIT_SET); + apbh_regs + HW_APBHX_CHANNEL_CTRL + STMP_OFFSET_REG_SET); return 0; } @@ -250,10 +250,10 @@ static int mxs_dma_enable_irq(int channel, int enable) if (enable) writel(1 << (channel + BP_APBHX_CTRL1_CH_CMDCMPLT_IRQ_EN), - apbh_regs + HW_APBHX_CTRL1 + BIT_SET); + apbh_regs + HW_APBHX_CTRL1 + STMP_OFFSET_REG_SET); else writel(1 << (channel + BP_APBHX_CTRL1_CH_CMDCMPLT_IRQ_EN), - apbh_regs + HW_APBHX_CTRL1 + BIT_CLR); + apbh_regs + HW_APBHX_CTRL1 + STMP_OFFSET_REG_CLR); return 0; } @@ -273,8 +273,8 @@ static int mxs_dma_ack_irq(int channel) if (ret) return ret; - writel(1 << channel, apbh_regs + HW_APBHX_CTRL1 + BIT_CLR); - writel(1 << channel, apbh_regs + HW_APBHX_CTRL2 + BIT_CLR); + writel(1 << channel, apbh_regs + HW_APBHX_CTRL1 + STMP_OFFSET_REG_CLR); + writel(1 << channel, apbh_regs + HW_APBHX_CTRL2 + STMP_OFFSET_REG_CLR); return 0; } @@ -555,7 +555,7 @@ int mxs_dma_init(void) int ret, channel; u32 val, reg; - ret = mxs_reset_block(apbh_regs, 0); + ret = stmp_reset_block(apbh_regs, 0); if (ret) return ret; @@ -569,10 +569,10 @@ int mxs_dma_init(void) apbh_is_old = (readl((void *)reg) >> 24) < 3; writel(BM_APBH_CTRL0_APB_BURST8_EN, - apbh_regs + HW_APBHX_CTRL0 + BIT_SET); + apbh_regs + HW_APBHX_CTRL0 + STMP_OFFSET_REG_SET); writel(BM_APBH_CTRL0_APB_BURST_EN, - apbh_regs + HW_APBHX_CTRL0 + BIT_SET); + apbh_regs + HW_APBHX_CTRL0 + STMP_OFFSET_REG_SET); for (channel = 0; channel < MXS_MAX_DMA_CHANNELS; channel++) { pchan = mxs_dma_channels + channel; diff --git a/drivers/mci/mxs.c b/drivers/mci/mxs.c index 023f92236a..1b935f7ce6 100644 --- a/drivers/mci/mxs.c +++ b/drivers/mci/mxs.c @@ -36,10 +36,10 @@ #include <errno.h> #include <clock.h> #include <io.h> +#include <stmp-device.h> #include <linux/clk.h> #include <linux/err.h> #include <asm/bitops.h> -#include <mach/mxs.h> #include <mach/imx-regs.h> #include <mach/mci.h> #include <mach/clock.h> @@ -457,7 +457,7 @@ static int mxs_mci_initialize(struct mci_host *host, struct device_d *mci_dev) writel(SSP_CTRL0_CLKGATE, mxs_mci->regs + HW_SSP_CTRL0 + 8); /* reset the unit */ - mxs_reset_block(mxs_mci->regs + HW_SSP_CTRL0, 0); + stmp_reset_block(mxs_mci->regs + HW_SSP_CTRL0, 0); /* restore the last settings */ mxs_mci_setup_timeout(mxs_mci, 0xffff); diff --git a/drivers/mtd/nand/nand_mxs.c b/drivers/mtd/nand/nand_mxs.c index bd98909951..046fcc30b3 100644 --- a/drivers/mtd/nand/nand_mxs.c +++ b/drivers/mtd/nand/nand_mxs.c @@ -28,12 +28,12 @@ #include <errno.h> #include <driver.h> #include <init.h> +#include <stmp-device.h> #include <asm/mmu.h> #include <asm/io.h> #include <mach/clock.h> #include <mach/imx-regs.h> #include <mach/dma.h> -#include <mach/mxs.h> #define MX28_BLOCK_SFTRST (1 << 31) #define MX28_BLOCK_CLKGATE (1 << 30) @@ -313,7 +313,7 @@ static int mxs_nand_wait_for_bch_complete(void) ret = (timeout == 0) ? -ETIMEDOUT : 0; - writel(BCH_CTRL_COMPLETE_IRQ, bch_regs + BCH_CTRL + BIT_CLR); + writel(BCH_CTRL_COMPLETE_IRQ, bch_regs + BCH_CTRL + STMP_OFFSET_REG_CLR); return ret; } @@ -1048,7 +1048,7 @@ static int mxs_nand_scan_bbt(struct mtd_info *mtd) int ret; /* Reset BCH. Don't use SFTRST on MX23 due to Errata #2847 */ - ret = mxs_reset_block(bch_regs + BCH_CTRL, + ret = stmp_reset_block(bch_regs + BCH_CTRL, nand_info->version == GPMI_VERSION_TYPE_MX23); if (ret) return ret; @@ -1073,7 +1073,7 @@ static int mxs_nand_scan_bbt(struct mtd_info *mtd) writel(0, bch_regs + BCH_LAYOUTSELECT); /* Enable BCH complete interrupt */ - writel(BCH_CTRL_COMPLETE_IRQ_EN, bch_regs + BCH_CTRL + BIT_SET); + writel(BCH_CTRL_COMPLETE_IRQ_EN, bch_regs + BCH_CTRL + STMP_OFFSET_REG_SET); /* Hook some operations at the MTD level. */ if (mtd->read_oob != mxs_nand_hook_read_oob) { @@ -1154,7 +1154,7 @@ int mxs_nand_hw_init(struct mxs_nand_info *info) mxs_dma_init(); /* Reset the GPMI block. */ - ret = mxs_reset_block(gpmi_regs + GPMI_CTRL0, 0); + ret = stmp_reset_block(gpmi_regs + GPMI_CTRL0, 0); if (ret) return ret; @@ -1162,7 +1162,7 @@ int mxs_nand_hw_init(struct mxs_nand_info *info) info->version = val >> GPMI_VERSION_MINOR_OFFSET; /* Reset BCH. Don't use SFTRST on MX23 due to Errata #2847 */ - ret = mxs_reset_block(bch_regs + BCH_CTRL, + ret = stmp_reset_block(bch_regs + BCH_CTRL, info->version == GPMI_VERSION_TYPE_MX23); if (ret) return ret; diff --git a/drivers/serial/serial_auart.c b/drivers/serial/serial_auart.c index 98f7c75de5..6518dbb77d 100644 --- a/drivers/serial/serial_auart.c +++ b/drivers/serial/serial_auart.c @@ -171,7 +171,7 @@ static int auart_clocksource_clock_change(struct notifier_block *nb, unsigned lo static void auart_serial_init_port(struct auart_priv *priv) { - mxs_reset_block(priv->base + HW_UARTAPP_CTRL0, 0); + stmp_reset_block(priv->base + HW_UARTAPP_CTRL0, 0); /* Disable UART */ writel(0x0, priv->base + HW_UARTAPP_CTRL2); diff --git a/drivers/spi/mxs_spi.c b/drivers/spi/mxs_spi.c index 8dfd6d54e5..4e539bfbca 100644 --- a/drivers/spi/mxs_spi.c +++ b/drivers/spi/mxs_spi.c @@ -20,6 +20,7 @@ #include <clock.h> #include <errno.h> #include <io.h> +#include <stmp-device.h> #include <linux/clk.h> #include <linux/err.h> #include <asm/mmu.h> @@ -99,11 +100,11 @@ static int mxs_spi_setup(struct spi_device *spi) return -EINVAL; } - mxs_reset_block(mxs->regs + HW_SSP_CTRL0, 0); + stmp_reset_block(mxs->regs + HW_SSP_CTRL0); val |= SSP_CTRL0_SSP_ASSERT_OUT(spi->chip_select); val |= SSP_CTRL0_BUS_WIDTH(0); - writel(val, mxs->regs + HW_SSP_CTRL0 + BIT_SET); + writel(val, mxs->regs + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET); val = SSP_CTRL1_SSP_MODE(0) | SSP_CTRL1_WORD_LENGTH(7); val |= (mxs->mode & SPI_CPOL) ? SSP_CTRL1_POLARITY : 0; @@ -120,14 +121,14 @@ static int mxs_spi_setup(struct spi_device *spi) static void mxs_spi_start_xfer(struct mxs_spi *mxs) { - writel(SSP_CTRL0_LOCK_CS, mxs->regs + HW_SSP_CTRL0 + BIT_SET); - writel(SSP_CTRL0_IGNORE_CRC, mxs->regs + HW_SSP_CTRL0 + BIT_CLR); + writel(SSP_CTRL0_LOCK_CS, mxs->regs + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET); + writel(SSP_CTRL0_IGNORE_CRC, mxs->regs + HW_SSP_CTRL0 + STMP_OFFSET_REG_CLR); } static void mxs_spi_end_xfer(struct mxs_spi *mxs) { - writel(SSP_CTRL0_LOCK_CS, mxs->regs + HW_SSP_CTRL0 + BIT_CLR); - writel(SSP_CTRL0_IGNORE_CRC, mxs->regs + HW_SSP_CTRL0 + BIT_SET); + writel(SSP_CTRL0_LOCK_CS, mxs->regs + HW_SSP_CTRL0 + STMP_OFFSET_REG_CLR); + writel(SSP_CTRL0_IGNORE_CRC, mxs->regs + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET); } static void mxs_spi_set_cs(struct spi_device *spi) @@ -136,8 +137,8 @@ static void mxs_spi_set_cs(struct spi_device *spi) const uint32_t mask = SSP_CTRL0_WAIT_FOR_CMD | SSP_CTRL0_WAIT_FOR_IRQ; uint32_t select = SSP_CTRL0_SSP_ASSERT_OUT(spi->chip_select); - writel(mask, mxs->regs + HW_SSP_CTRL0 + BIT_CLR); - writel(select, mxs->regs + HW_SSP_CTRL0 + BIT_SET); + writel(mask, mxs->regs + HW_SSP_CTRL0 + STMP_OFFSET_REG_CLR); + writel(select, mxs->regs + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET); } static int mxs_spi_xfer_pio(struct spi_device *spi, @@ -159,11 +160,11 @@ static int mxs_spi_xfer_pio(struct spi_device *spi, writel(1, mxs->regs + HW_SSP_XFER_COUNT); if (write) - writel(SSP_CTRL0_READ, mxs->regs + HW_SSP_CTRL0 + BIT_CLR); + writel(SSP_CTRL0_READ, mxs->regs + HW_SSP_CTRL0 + STMP_OFFSET_REG_CLR); else - writel(SSP_CTRL0_READ, mxs->regs + HW_SSP_CTRL0 + BIT_SET); + writel(SSP_CTRL0_READ, mxs->regs + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET); - writel(SSP_CTRL0_RUN, mxs->regs + HW_SSP_CTRL0 + BIT_SET); + writel(SSP_CTRL0_RUN, mxs->regs + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET); if (wait_on_timeout(MXS_SPI_MAX_TIMEOUT, (readl(mxs->regs + HW_SSP_CTRL0) & SSP_CTRL0_RUN) == SSP_CTRL0_RUN)) { @@ -174,7 +175,7 @@ static int mxs_spi_xfer_pio(struct spi_device *spi, if (write) writel(*data++, mxs->regs + HW_SSP_DATA); - writel(SSP_CTRL0_DATA_XFER, mxs->regs + HW_SSP_CTRL0 + BIT_SET); + writel(SSP_CTRL0_DATA_XFER, mxs->regs + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET); if (!write) { if (wait_on_timeout(MXS_SPI_MAX_TIMEOUT, @@ -240,7 +241,7 @@ static int mxs_spi_transfer(struct spi_device *spi, struct spi_message *mesg) } } - writel(SSP_CTRL1_DMA_ENABLE, mxs->regs + HW_SSP_CTRL1 + BIT_CLR); + writel(SSP_CTRL1_DMA_ENABLE, mxs->regs + HW_SSP_CTRL1 + STMP_OFFSET_REG_CLR); ret = mxs_spi_xfer_pio(spi, data, t->len, write, flags); if (ret < 0) return ret; diff --git a/drivers/video/stm.c b/drivers/video/stm.c index d5212f8a12..0875c9b0f7 100644 --- a/drivers/video/stm.c +++ b/drivers/video/stm.c @@ -24,6 +24,7 @@ #include <errno.h> #include <xfuncs.h> #include <io.h> +#include <stmp-device.h> #include <linux/clk.h> #include <linux/err.h> #include <mach/imx-regs.h> @@ -222,7 +223,7 @@ static void stmfb_enable_controller(struct fb_info *fb_info) * Sometimes some data is still present in the FIFO. This leads into * a correct but shifted picture. Clearing the FIFO helps */ - writel(CTRL1_FIFO_CLEAR, fbi->base + HW_LCDIF_CTRL1 + BIT_SET); + writel(CTRL1_FIFO_CLEAR, fbi->base + HW_LCDIF_CTRL1 + STMP_OFFSET_REG_SET); /* if it was disabled, re-enable the mode again */ reg = readl(fbi->base + HW_LCDIF_CTRL); @@ -255,14 +256,14 @@ static void stmfb_enable_controller(struct fb_info *fb_info) } /* stop FIFO reset */ - writel(CTRL1_FIFO_CLEAR, fbi->base + HW_LCDIF_CTRL1 + BIT_CLR); + writel(CTRL1_FIFO_CLEAR, fbi->base + HW_LCDIF_CTRL1 + STMP_OFFSET_REG_CLR); /* enable LCD using LCD_RESET signal*/ if (fbi->pdata->flags & USE_LCD_RESET) - writel(CTRL1_RESET, fbi->base + HW_LCDIF_CTRL1 + BIT_SET); + writel(CTRL1_RESET, fbi->base + HW_LCDIF_CTRL1 + STMP_OFFSET_REG_SET); /* start the engine right now */ - writel(CTRL_RUN, fbi->base + HW_LCDIF_CTRL + BIT_SET); + writel(CTRL_RUN, fbi->base + HW_LCDIF_CTRL + STMP_OFFSET_REG_SET); if (fbi->pdata->enable) fbi->pdata->enable(1); @@ -277,7 +278,7 @@ static void stmfb_disable_controller(struct fb_info *fb_info) /* disable LCD using LCD_RESET signal*/ if (fbi->pdata->flags & USE_LCD_RESET) - writel(CTRL1_RESET, fbi->base + HW_LCDIF_CTRL1 + BIT_CLR); + writel(CTRL1_RESET, fbi->base + HW_LCDIF_CTRL1 + STMP_OFFSET_REG_CLR); if (fbi->pdata->enable) fbi->pdata->enable(0); |