Message ID | 20181120124814.23293-5-jagan@amarulasolutions.com |
---|---|
State | Changes Requested |
Delegated to: | Jagannadha Sutradharudu Teki |
Headers | show |
Series | spi: DM_SPI migration timeout! | expand |
Hi Jagan, On Wed, Nov 21, 2018 at 2:00 AM Jagan Teki <jagan@amarulasolutions.com> wrote: > > kirkwood now support dt along with platform data, > respective boards need to switch into dm for the same. > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > --- > Makefile | 2 +- > drivers/spi/Makefile | 2 +- > drivers/spi/kirkwood_spi.c | 229 +++++------------------- > drivers/spi/spi.c | 4 +- > include/dm/platform_data/spi_kirkwood.h | 15 ++ > 5 files changed, 61 insertions(+), 191 deletions(-) > create mode 100644 include/dm/platform_data/spi_kirkwood.h > > diff --git a/Makefile b/Makefile > index d06cb5c287..214f1bcdbf 100644 > --- a/Makefile > +++ b/Makefile > @@ -919,7 +919,7 @@ ifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y) > @echo "====================================================" > endif > ifeq ($(CONFIG_DM_SPI),) > -ifeq ($(CONFIG_DAVINCI_SPI),y) > +ifeq ($(filter $(CONFIG_DAVINCI_SPI) $(CONFIG_KIRKWOOD_SPI),y),y) > @echo "===================== WARNING ======================" > @echo "This board uses SPI driver from drivers/spi/ without" > @echo "enabling CONFIG_DM_SPI. Please enable CONFIG_DM_SPI" > diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile > index cf5a5cccc0..3c74418992 100644 > --- a/drivers/spi/Makefile > +++ b/drivers/spi/Makefile > @@ -7,6 +7,7 @@ > ifdef CONFIG_DM_SPI > obj-y += spi-uclass.o > obj-$(CONFIG_DAVINCI_SPI) += davinci_spi.o > +obj-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o > obj-$(CONFIG_SANDBOX) += spi-emul-uclass.o > obj-$(CONFIG_SOFT_SPI) += soft_spi.o > obj-$(CONFIG_SPI_MEM) += spi-mem.o > @@ -29,7 +30,6 @@ obj-$(CONFIG_FSL_DSPI) += fsl_dspi.o > obj-$(CONFIG_FSL_ESPI) += fsl_espi.o > obj-$(CONFIG_FSL_QSPI) += fsl_qspi.o > obj-$(CONFIG_ICH_SPI) += ich.o > -obj-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o > obj-$(CONFIG_LPC32XX_SSP) += lpc32xx_ssp.o > obj-$(CONFIG_MPC8XX_SPI) += mpc8xx_spi.o > obj-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o > diff --git a/drivers/spi/kirkwood_spi.c b/drivers/spi/kirkwood_spi.c > index 5dd1ad67cf..e9ca95697f 100644 > --- a/drivers/spi/kirkwood_spi.c > +++ b/drivers/spi/kirkwood_spi.c > @@ -13,31 +13,41 @@ > #include <spi.h> > #include <asm/io.h> > #include <asm/arch/soc.h> > -#ifdef CONFIG_KIRKWOOD > -#include <asm/arch/mpp.h> > -#endif > #include <asm/arch-mvebu/spi.h> > > -static void _spi_cs_activate(struct kwspi_registers *reg) > +#include <dm/platform_data/spi_kirkwood.h> > + > +struct mvebu_spi_dev { > + bool is_errata_50mhz_ac; > +}; > + > +struct mvebu_spi_priv { > + struct kwspi_registers *spireg; > +}; > + > +static void spi_cs_activate(struct kwspi_registers *reg) > { > setbits_le32(®->ctrl, KWSPI_CSN_ACT); > } > > -static void _spi_cs_deactivate(struct kwspi_registers *reg) > +static void spi_cs_deactivate(struct kwspi_registers *reg) > { > clrbits_le32(®->ctrl, KWSPI_CSN_ACT); > } > > -static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > - const void *dout, void *din, unsigned long flags) > +static int mvebu_spi_xfer(struct udevice *dev, unsigned int bitlen, > + const void *dout, void *din, unsigned long flags) > { > + struct udevice *bus = dev->parent; > + struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > + struct kwspi_registers *reg = plat->spireg; > unsigned int tmpdout, tmpdin; > int tm, isread = 0; > > - debug("spi_xfer: dout %p din %p bitlen %u\n", dout, din, bitlen); > + debug("%s: dout %p din %p bitlen %u\n", __func__, dout, din, bitlen); > > if (flags & SPI_XFER_BEGIN) > - _spi_cs_activate(reg); > + spi_cs_activate(reg); > > /* > * handle data in 8-bit chunks > @@ -55,8 +65,8 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > clrbits_le32(®->irq_cause, KWSPI_SMEMRDIRQ); > writel(tmpdout, ®->dout); /* Write the data out */ > - debug("*** spi_xfer: ... %08x written, bitlen %d\n", > - tmpdout, bitlen); > + debug("%s: ... %08x written, bitlen %d\n", > + __func__, tmpdout, bitlen); > > /* > * Wait for SPI transmit to get out > @@ -67,8 +77,8 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > if (readl(®->irq_cause) & KWSPI_SMEMRDIRQ) { > isread = 1; > tmpdin = readl(®->din); > - debug("spi_xfer: din %p..%08x read\n", > - din, tmpdin); > + debug("%s: din %p..%08x read\n", > + __func__, din, tmpdin); > > if (din) { > *((u8 *)din) = (u8)tmpdin; > @@ -82,179 +92,17 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > break; > } > if (tm >= KWSPI_TIMEOUT) > - printf("*** spi_xfer: Time out during SPI transfer\n"); > + printf("%s: Time out during SPI transfer\n", __func__); > > debug("loopend bitlen %d\n", bitlen); > } > > if (flags & SPI_XFER_END) > - _spi_cs_deactivate(reg); > + spi_cs_deactivate(reg); > > return 0; > } > > -#ifndef CONFIG_DM_SPI > - > -static struct kwspi_registers *spireg = > - (struct kwspi_registers *)MVEBU_SPI_BASE; > - > -#ifdef CONFIG_KIRKWOOD > -static u32 cs_spi_mpp_back[2]; > -#endif > - > -struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, > - unsigned int max_hz, unsigned int mode) > -{ > - struct spi_slave *slave; > - u32 data; > -#ifdef CONFIG_KIRKWOOD > - static const u32 kwspi_mpp_config[2][2] = { > - { MPP0_SPI_SCn, 0 }, /* if cs == 0 */ > - { MPP7_SPI_SCn, 0 } /* if cs != 0 */ > - }; > -#endif > - > - if (!spi_cs_is_valid(bus, cs)) > - return NULL; > - > - slave = spi_alloc_slave_base(bus, cs); > - if (!slave) > - return NULL; > - > - writel(KWSPI_SMEMRDY, &spireg->ctrl); > - > - /* calculate spi clock prescaller using max_hz */ > - data = ((CONFIG_SYS_TCLK / 2) / max_hz) + 0x10; > - data = data < KWSPI_CLKPRESCL_MIN ? KWSPI_CLKPRESCL_MIN : data; > - data = data > KWSPI_CLKPRESCL_MASK ? KWSPI_CLKPRESCL_MASK : data; > - > - /* program spi clock prescaller using max_hz */ > - writel(KWSPI_ADRLEN_3BYTE | data, &spireg->cfg); > - debug("data = 0x%08x\n", data); > - > - writel(KWSPI_SMEMRDIRQ, &spireg->irq_cause); > - writel(KWSPI_IRQMASK, &spireg->irq_mask); > - > -#ifdef CONFIG_KIRKWOOD > - /* program mpp registers to select SPI_CSn */ > - kirkwood_mpp_conf(kwspi_mpp_config[cs ? 1 : 0], cs_spi_mpp_back); > -#endif > - > - return slave; > -} > - > -void spi_free_slave(struct spi_slave *slave) > -{ > -#ifdef CONFIG_KIRKWOOD > - kirkwood_mpp_conf(cs_spi_mpp_back, NULL); > -#endif > - free(slave); > -} > - > -#if defined(CONFIG_SYS_KW_SPI_MPP) > -u32 spi_mpp_backup[4]; > -#endif > - > -__attribute__((weak)) int board_spi_claim_bus(struct spi_slave *slave) > -{ > - return 0; > -} > - > -int spi_claim_bus(struct spi_slave *slave) > -{ > -#if defined(CONFIG_SYS_KW_SPI_MPP) > - u32 config; > - u32 spi_mpp_config[4]; > - > - config = CONFIG_SYS_KW_SPI_MPP; > - > - if (config & MOSI_MPP6) > - spi_mpp_config[0] = MPP6_SPI_MOSI; > - else > - spi_mpp_config[0] = MPP1_SPI_MOSI; > - > - if (config & SCK_MPP10) > - spi_mpp_config[1] = MPP10_SPI_SCK; > - else > - spi_mpp_config[1] = MPP2_SPI_SCK; > - > - if (config & MISO_MPP11) > - spi_mpp_config[2] = MPP11_SPI_MISO; > - else > - spi_mpp_config[2] = MPP3_SPI_MISO; > - > - spi_mpp_config[3] = 0; > - spi_mpp_backup[3] = 0; > - > - /* set new spi mpp and save current mpp config */ > - kirkwood_mpp_conf(spi_mpp_config, spi_mpp_backup); > -#endif > - > - return board_spi_claim_bus(slave); > -} > - > -__attribute__((weak)) void board_spi_release_bus(struct spi_slave *slave) > -{ > -} > - > -void spi_release_bus(struct spi_slave *slave) > -{ > -#if defined(CONFIG_SYS_KW_SPI_MPP) > - kirkwood_mpp_conf(spi_mpp_backup, NULL); > -#endif > - > - board_spi_release_bus(slave); > -} > - > -#ifndef CONFIG_SPI_CS_IS_VALID > -/* > - * you can define this function board specific > - * define above CONFIG in board specific config file and > - * provide the function in board specific src file > - */ > -int spi_cs_is_valid(unsigned int bus, unsigned int cs) > -{ > - return bus == 0 && (cs == 0 || cs == 1); > -} > -#endif > - > -void spi_init(void) > -{ > -} > - > -void spi_cs_activate(struct spi_slave *slave) > -{ > - _spi_cs_activate(spireg); > -} > - > -void spi_cs_deactivate(struct spi_slave *slave) > -{ > - _spi_cs_deactivate(spireg); > -} > - > -int spi_xfer(struct spi_slave *slave, unsigned int bitlen, > - const void *dout, void *din, unsigned long flags) > -{ > - return _spi_xfer(spireg, bitlen, dout, din, flags); > -} > - > -#else > - > -/* Here now the DM part */ > - > -struct mvebu_spi_dev { > - bool is_errata_50mhz_ac; > -}; > - > -struct mvebu_spi_platdata { > - struct kwspi_registers *spireg; > - bool is_errata_50mhz_ac; > -}; > - > -struct mvebu_spi_priv { > - struct kwspi_registers *spireg; > -}; > - > static int mvebu_spi_set_speed(struct udevice *bus, uint hz) > { > struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > @@ -329,15 +177,6 @@ static int mvebu_spi_set_mode(struct udevice *bus, uint mode) > return 0; > } > > -static int mvebu_spi_xfer(struct udevice *dev, unsigned int bitlen, > - const void *dout, void *din, unsigned long flags) > -{ > - struct udevice *bus = dev->parent; > - struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > - > - return _spi_xfer(plat->spireg, bitlen, dout, din, flags); > -} > - > static int mvebu_spi_claim_bus(struct udevice *dev) > { > struct udevice *bus = dev->parent; > @@ -351,6 +190,17 @@ static int mvebu_spi_claim_bus(struct udevice *dev) > return 0; > } > > +static const struct dm_spi_ops mvebu_spi_ops = { > + .claim_bus = mvebu_spi_claim_bus, > + .xfer = mvebu_spi_xfer, > + .set_speed = mvebu_spi_set_speed, > + .set_mode = mvebu_spi_set_mode, > + /* > + * cs_info is not needed, since we require all chip selects to be > + * in the device tree explicitly > + */ > +}; This was already added in commit 9985bdb1cea7 ("spi: kirkwood_spi.c: Add driver model support"). > static int mvebu_spi_probe(struct udevice *bus) > { > struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > @@ -363,6 +213,7 @@ static int mvebu_spi_probe(struct udevice *bus) > return 0; > } > > +#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) > static int mvebu_spi_ofdata_to_platdata(struct udevice *bus) > { > struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > @@ -421,15 +272,17 @@ static const struct udevice_id mvebu_spi_ids[] = { > }, > { } > }; > +#endif > > U_BOOT_DRIVER(mvebu_spi) = { > .name = "mvebu_spi", > .id = UCLASS_SPI, > +#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) > .of_match = mvebu_spi_ids, > - .ops = &mvebu_spi_ops, > .ofdata_to_platdata = mvebu_spi_ofdata_to_platdata, > .platdata_auto_alloc_size = sizeof(struct mvebu_spi_platdata), > +#endif > + .ops = &mvebu_spi_ops, > .priv_auto_alloc_size = sizeof(struct mvebu_spi_priv), > .probe = mvebu_spi_probe, > }; > -#endif > diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c > index ba1d1b082d..5181d5b83f 100644 > --- a/drivers/spi/spi.c > +++ b/drivers/spi/spi.c > @@ -39,7 +39,9 @@ void *spi_do_alloc_slave(int offset, int size, unsigned int bus, > return ptr; > } > > -#if !defined(CONFIG_DM_SPI) && defined(CONFIG_DAVINCI_SPI) > +#if !defined(CONFIG_DM_SPI) && \ > + defined(CONFIG_DAVINCI_SPI) || \ > + defined(CONFIG_KIRKWOOD_SPI) > void spi_cs_activate(struct spi_slave *slave) > { > } > diff --git a/include/dm/platform_data/spi_kirkwood.h b/include/dm/platform_data/spi_kirkwood.h > new file mode 100644 > index 0000000000..ae9b2783a9 > --- /dev/null > +++ b/include/dm/platform_data/spi_kirkwood.h > @@ -0,0 +1,15 @@ > +/* > + * Copyright (C) 2018 Jagan Teki <jagan@amarulasolutions.com> > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#ifndef __spi_kirkwood_h > +#define __spi_kirkwood_h > + > +struct mvebu_spi_platdata { > + struct kwspi_registers *spireg; > + bool is_errata_50mhz_ac; > +}; > + > +#endif /* __spi_kirkwood_h */ > -- > 2.18.0.321.gffc6fa0e3 > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > https://lists.denx.de/listinfo/u-boot
On Wed, Nov 21, 2018 at 1:22 PM Chris Packham <judge.packham@gmail.com> wrote: > > Hi Jagan, > On Wed, Nov 21, 2018 at 2:00 AM Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > kirkwood now support dt along with platform data, > > respective boards need to switch into dm for the same. > > > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > > --- > > Makefile | 2 +- > > drivers/spi/Makefile | 2 +- > > drivers/spi/kirkwood_spi.c | 229 +++++------------------- > > drivers/spi/spi.c | 4 +- > > include/dm/platform_data/spi_kirkwood.h | 15 ++ > > 5 files changed, 61 insertions(+), 191 deletions(-) > > create mode 100644 include/dm/platform_data/spi_kirkwood.h > > > > diff --git a/Makefile b/Makefile > > index d06cb5c287..214f1bcdbf 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -919,7 +919,7 @@ ifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y) > > @echo "====================================================" > > endif > > ifeq ($(CONFIG_DM_SPI),) > > -ifeq ($(CONFIG_DAVINCI_SPI),y) > > +ifeq ($(filter $(CONFIG_DAVINCI_SPI) $(CONFIG_KIRKWOOD_SPI),y),y) > > @echo "===================== WARNING ======================" > > @echo "This board uses SPI driver from drivers/spi/ without" > > @echo "enabling CONFIG_DM_SPI. Please enable CONFIG_DM_SPI" > > diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile > > index cf5a5cccc0..3c74418992 100644 > > --- a/drivers/spi/Makefile > > +++ b/drivers/spi/Makefile > > @@ -7,6 +7,7 @@ > > ifdef CONFIG_DM_SPI > > obj-y += spi-uclass.o > > obj-$(CONFIG_DAVINCI_SPI) += davinci_spi.o > > +obj-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o > > obj-$(CONFIG_SANDBOX) += spi-emul-uclass.o > > obj-$(CONFIG_SOFT_SPI) += soft_spi.o > > obj-$(CONFIG_SPI_MEM) += spi-mem.o > > @@ -29,7 +30,6 @@ obj-$(CONFIG_FSL_DSPI) += fsl_dspi.o > > obj-$(CONFIG_FSL_ESPI) += fsl_espi.o > > obj-$(CONFIG_FSL_QSPI) += fsl_qspi.o > > obj-$(CONFIG_ICH_SPI) += ich.o > > -obj-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o > > obj-$(CONFIG_LPC32XX_SSP) += lpc32xx_ssp.o > > obj-$(CONFIG_MPC8XX_SPI) += mpc8xx_spi.o > > obj-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o > > diff --git a/drivers/spi/kirkwood_spi.c b/drivers/spi/kirkwood_spi.c > > index 5dd1ad67cf..e9ca95697f 100644 > > --- a/drivers/spi/kirkwood_spi.c > > +++ b/drivers/spi/kirkwood_spi.c > > @@ -13,31 +13,41 @@ > > #include <spi.h> > > #include <asm/io.h> > > #include <asm/arch/soc.h> > > -#ifdef CONFIG_KIRKWOOD > > -#include <asm/arch/mpp.h> > > -#endif > > #include <asm/arch-mvebu/spi.h> > > > > -static void _spi_cs_activate(struct kwspi_registers *reg) > > +#include <dm/platform_data/spi_kirkwood.h> > > + > > +struct mvebu_spi_dev { > > + bool is_errata_50mhz_ac; > > +}; > > + > > +struct mvebu_spi_priv { > > + struct kwspi_registers *spireg; > > +}; > > + > > +static void spi_cs_activate(struct kwspi_registers *reg) > > { > > setbits_le32(®->ctrl, KWSPI_CSN_ACT); > > } > > > > -static void _spi_cs_deactivate(struct kwspi_registers *reg) > > +static void spi_cs_deactivate(struct kwspi_registers *reg) > > { > > clrbits_le32(®->ctrl, KWSPI_CSN_ACT); > > } > > > > -static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > - const void *dout, void *din, unsigned long flags) > > +static int mvebu_spi_xfer(struct udevice *dev, unsigned int bitlen, > > + const void *dout, void *din, unsigned long flags) > > { > > + struct udevice *bus = dev->parent; > > + struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > > + struct kwspi_registers *reg = plat->spireg; > > unsigned int tmpdout, tmpdin; > > int tm, isread = 0; > > > > - debug("spi_xfer: dout %p din %p bitlen %u\n", dout, din, bitlen); > > + debug("%s: dout %p din %p bitlen %u\n", __func__, dout, din, bitlen); > > > > if (flags & SPI_XFER_BEGIN) > > - _spi_cs_activate(reg); > > + spi_cs_activate(reg); > > > > /* > > * handle data in 8-bit chunks > > @@ -55,8 +65,8 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > > > clrbits_le32(®->irq_cause, KWSPI_SMEMRDIRQ); > > writel(tmpdout, ®->dout); /* Write the data out */ > > - debug("*** spi_xfer: ... %08x written, bitlen %d\n", > > - tmpdout, bitlen); > > + debug("%s: ... %08x written, bitlen %d\n", > > + __func__, tmpdout, bitlen); > > > > /* > > * Wait for SPI transmit to get out > > @@ -67,8 +77,8 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > if (readl(®->irq_cause) & KWSPI_SMEMRDIRQ) { > > isread = 1; > > tmpdin = readl(®->din); > > - debug("spi_xfer: din %p..%08x read\n", > > - din, tmpdin); > > + debug("%s: din %p..%08x read\n", > > + __func__, din, tmpdin); > > > > if (din) { > > *((u8 *)din) = (u8)tmpdin; > > @@ -82,179 +92,17 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > break; > > } > > if (tm >= KWSPI_TIMEOUT) > > - printf("*** spi_xfer: Time out during SPI transfer\n"); > > + printf("%s: Time out during SPI transfer\n", __func__); > > > > debug("loopend bitlen %d\n", bitlen); > > } > > > > if (flags & SPI_XFER_END) > > - _spi_cs_deactivate(reg); > > + spi_cs_deactivate(reg); > > > > return 0; > > } > > > > -#ifndef CONFIG_DM_SPI > > - > > -static struct kwspi_registers *spireg = > > - (struct kwspi_registers *)MVEBU_SPI_BASE; > > - > > -#ifdef CONFIG_KIRKWOOD > > -static u32 cs_spi_mpp_back[2]; > > -#endif > > - > > -struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, > > - unsigned int max_hz, unsigned int mode) > > -{ > > - struct spi_slave *slave; > > - u32 data; > > -#ifdef CONFIG_KIRKWOOD > > - static const u32 kwspi_mpp_config[2][2] = { > > - { MPP0_SPI_SCn, 0 }, /* if cs == 0 */ > > - { MPP7_SPI_SCn, 0 } /* if cs != 0 */ > > - }; > > -#endif > > - > > - if (!spi_cs_is_valid(bus, cs)) > > - return NULL; > > - > > - slave = spi_alloc_slave_base(bus, cs); > > - if (!slave) > > - return NULL; > > - > > - writel(KWSPI_SMEMRDY, &spireg->ctrl); > > - > > - /* calculate spi clock prescaller using max_hz */ > > - data = ((CONFIG_SYS_TCLK / 2) / max_hz) + 0x10; > > - data = data < KWSPI_CLKPRESCL_MIN ? KWSPI_CLKPRESCL_MIN : data; > > - data = data > KWSPI_CLKPRESCL_MASK ? KWSPI_CLKPRESCL_MASK : data; > > - > > - /* program spi clock prescaller using max_hz */ > > - writel(KWSPI_ADRLEN_3BYTE | data, &spireg->cfg); > > - debug("data = 0x%08x\n", data); > > - > > - writel(KWSPI_SMEMRDIRQ, &spireg->irq_cause); > > - writel(KWSPI_IRQMASK, &spireg->irq_mask); > > - > > -#ifdef CONFIG_KIRKWOOD > > - /* program mpp registers to select SPI_CSn */ > > - kirkwood_mpp_conf(kwspi_mpp_config[cs ? 1 : 0], cs_spi_mpp_back); > > -#endif > > - > > - return slave; > > -} > > - > > -void spi_free_slave(struct spi_slave *slave) > > -{ > > -#ifdef CONFIG_KIRKWOOD > > - kirkwood_mpp_conf(cs_spi_mpp_back, NULL); > > -#endif > > - free(slave); > > -} > > - > > -#if defined(CONFIG_SYS_KW_SPI_MPP) > > -u32 spi_mpp_backup[4]; > > -#endif > > - > > -__attribute__((weak)) int board_spi_claim_bus(struct spi_slave *slave) > > -{ > > - return 0; > > -} > > - > > -int spi_claim_bus(struct spi_slave *slave) > > -{ > > -#if defined(CONFIG_SYS_KW_SPI_MPP) > > - u32 config; > > - u32 spi_mpp_config[4]; > > - > > - config = CONFIG_SYS_KW_SPI_MPP; > > - > > - if (config & MOSI_MPP6) > > - spi_mpp_config[0] = MPP6_SPI_MOSI; > > - else > > - spi_mpp_config[0] = MPP1_SPI_MOSI; > > - > > - if (config & SCK_MPP10) > > - spi_mpp_config[1] = MPP10_SPI_SCK; > > - else > > - spi_mpp_config[1] = MPP2_SPI_SCK; > > - > > - if (config & MISO_MPP11) > > - spi_mpp_config[2] = MPP11_SPI_MISO; > > - else > > - spi_mpp_config[2] = MPP3_SPI_MISO; > > - > > - spi_mpp_config[3] = 0; > > - spi_mpp_backup[3] = 0; > > - > > - /* set new spi mpp and save current mpp config */ > > - kirkwood_mpp_conf(spi_mpp_config, spi_mpp_backup); > > -#endif > > - > > - return board_spi_claim_bus(slave); > > -} > > - > > -__attribute__((weak)) void board_spi_release_bus(struct spi_slave *slave) > > -{ > > -} > > - > > -void spi_release_bus(struct spi_slave *slave) > > -{ > > -#if defined(CONFIG_SYS_KW_SPI_MPP) > > - kirkwood_mpp_conf(spi_mpp_backup, NULL); > > -#endif > > - > > - board_spi_release_bus(slave); > > -} > > - > > -#ifndef CONFIG_SPI_CS_IS_VALID > > -/* > > - * you can define this function board specific > > - * define above CONFIG in board specific config file and > > - * provide the function in board specific src file > > - */ > > -int spi_cs_is_valid(unsigned int bus, unsigned int cs) > > -{ > > - return bus == 0 && (cs == 0 || cs == 1); > > -} > > -#endif > > - > > -void spi_init(void) > > -{ > > -} > > - > > -void spi_cs_activate(struct spi_slave *slave) > > -{ > > - _spi_cs_activate(spireg); > > -} > > - > > -void spi_cs_deactivate(struct spi_slave *slave) > > -{ > > - _spi_cs_deactivate(spireg); > > -} > > - > > -int spi_xfer(struct spi_slave *slave, unsigned int bitlen, > > - const void *dout, void *din, unsigned long flags) > > -{ > > - return _spi_xfer(spireg, bitlen, dout, din, flags); > > -} > > - > > -#else > > - > > -/* Here now the DM part */ > > - > > -struct mvebu_spi_dev { > > - bool is_errata_50mhz_ac; > > -}; > > - > > -struct mvebu_spi_platdata { > > - struct kwspi_registers *spireg; > > - bool is_errata_50mhz_ac; > > -}; > > - > > -struct mvebu_spi_priv { > > - struct kwspi_registers *spireg; > > -}; > > - > > static int mvebu_spi_set_speed(struct udevice *bus, uint hz) > > { > > struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > > @@ -329,15 +177,6 @@ static int mvebu_spi_set_mode(struct udevice *bus, uint mode) > > return 0; > > } > > > > -static int mvebu_spi_xfer(struct udevice *dev, unsigned int bitlen, > > - const void *dout, void *din, unsigned long flags) > > -{ > > - struct udevice *bus = dev->parent; > > - struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > > - > > - return _spi_xfer(plat->spireg, bitlen, dout, din, flags); > > -} > > - > > static int mvebu_spi_claim_bus(struct udevice *dev) > > { > > struct udevice *bus = dev->parent; > > @@ -351,6 +190,17 @@ static int mvebu_spi_claim_bus(struct udevice *dev) > > return 0; > > } > > > > +static const struct dm_spi_ops mvebu_spi_ops = { > > + .claim_bus = mvebu_spi_claim_bus, > > + .xfer = mvebu_spi_xfer, > > + .set_speed = mvebu_spi_set_speed, > > + .set_mode = mvebu_spi_set_mode, > > + /* > > + * cs_info is not needed, since we require all chip selects to be > > + * in the device tree explicitly > > + */ > > +}; > > This was already added in commit 9985bdb1cea7 ("spi: kirkwood_spi.c: > Add driver model support"). But this one is full conversion with platdata, no non-dm code.
On Wed, Nov 21, 2018 at 9:39 PM Jagan Teki <jagan@amarulasolutions.com> wrote: > > On Wed, Nov 21, 2018 at 1:22 PM Chris Packham <judge.packham@gmail.com> wrote: > > > > Hi Jagan, > > On Wed, Nov 21, 2018 at 2:00 AM Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > > > kirkwood now support dt along with platform data, > > > respective boards need to switch into dm for the same. > > > > > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > > > --- > > > Makefile | 2 +- > > > drivers/spi/Makefile | 2 +- > > > drivers/spi/kirkwood_spi.c | 229 +++++------------------- > > > drivers/spi/spi.c | 4 +- > > > include/dm/platform_data/spi_kirkwood.h | 15 ++ > > > 5 files changed, 61 insertions(+), 191 deletions(-) > > > create mode 100644 include/dm/platform_data/spi_kirkwood.h > > > > > > diff --git a/Makefile b/Makefile > > > index d06cb5c287..214f1bcdbf 100644 > > > --- a/Makefile > > > +++ b/Makefile > > > @@ -919,7 +919,7 @@ ifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y) > > > @echo "====================================================" > > > endif > > > ifeq ($(CONFIG_DM_SPI),) > > > -ifeq ($(CONFIG_DAVINCI_SPI),y) > > > +ifeq ($(filter $(CONFIG_DAVINCI_SPI) $(CONFIG_KIRKWOOD_SPI),y),y) > > > @echo "===================== WARNING ======================" > > > @echo "This board uses SPI driver from drivers/spi/ without" > > > @echo "enabling CONFIG_DM_SPI. Please enable CONFIG_DM_SPI" > > > diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile > > > index cf5a5cccc0..3c74418992 100644 > > > --- a/drivers/spi/Makefile > > > +++ b/drivers/spi/Makefile > > > @@ -7,6 +7,7 @@ > > > ifdef CONFIG_DM_SPI > > > obj-y += spi-uclass.o > > > obj-$(CONFIG_DAVINCI_SPI) += davinci_spi.o > > > +obj-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o > > > obj-$(CONFIG_SANDBOX) += spi-emul-uclass.o > > > obj-$(CONFIG_SOFT_SPI) += soft_spi.o > > > obj-$(CONFIG_SPI_MEM) += spi-mem.o > > > @@ -29,7 +30,6 @@ obj-$(CONFIG_FSL_DSPI) += fsl_dspi.o > > > obj-$(CONFIG_FSL_ESPI) += fsl_espi.o > > > obj-$(CONFIG_FSL_QSPI) += fsl_qspi.o > > > obj-$(CONFIG_ICH_SPI) += ich.o > > > -obj-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o > > > obj-$(CONFIG_LPC32XX_SSP) += lpc32xx_ssp.o > > > obj-$(CONFIG_MPC8XX_SPI) += mpc8xx_spi.o > > > obj-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o > > > diff --git a/drivers/spi/kirkwood_spi.c b/drivers/spi/kirkwood_spi.c > > > index 5dd1ad67cf..e9ca95697f 100644 > > > --- a/drivers/spi/kirkwood_spi.c > > > +++ b/drivers/spi/kirkwood_spi.c > > > @@ -13,31 +13,41 @@ > > > #include <spi.h> > > > #include <asm/io.h> > > > #include <asm/arch/soc.h> > > > -#ifdef CONFIG_KIRKWOOD > > > -#include <asm/arch/mpp.h> > > > -#endif > > > #include <asm/arch-mvebu/spi.h> > > > > > > -static void _spi_cs_activate(struct kwspi_registers *reg) > > > +#include <dm/platform_data/spi_kirkwood.h> > > > + > > > +struct mvebu_spi_dev { > > > + bool is_errata_50mhz_ac; > > > +}; > > > + > > > +struct mvebu_spi_priv { > > > + struct kwspi_registers *spireg; > > > +}; > > > + > > > +static void spi_cs_activate(struct kwspi_registers *reg) > > > { > > > setbits_le32(®->ctrl, KWSPI_CSN_ACT); > > > } > > > > > > -static void _spi_cs_deactivate(struct kwspi_registers *reg) > > > +static void spi_cs_deactivate(struct kwspi_registers *reg) > > > { > > > clrbits_le32(®->ctrl, KWSPI_CSN_ACT); > > > } > > > > > > -static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > > - const void *dout, void *din, unsigned long flags) > > > +static int mvebu_spi_xfer(struct udevice *dev, unsigned int bitlen, > > > + const void *dout, void *din, unsigned long flags) > > > { > > > + struct udevice *bus = dev->parent; > > > + struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > > > + struct kwspi_registers *reg = plat->spireg; > > > unsigned int tmpdout, tmpdin; > > > int tm, isread = 0; > > > > > > - debug("spi_xfer: dout %p din %p bitlen %u\n", dout, din, bitlen); > > > + debug("%s: dout %p din %p bitlen %u\n", __func__, dout, din, bitlen); > > > > > > if (flags & SPI_XFER_BEGIN) > > > - _spi_cs_activate(reg); > > > + spi_cs_activate(reg); > > > > > > /* > > > * handle data in 8-bit chunks > > > @@ -55,8 +65,8 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > > > > > clrbits_le32(®->irq_cause, KWSPI_SMEMRDIRQ); > > > writel(tmpdout, ®->dout); /* Write the data out */ > > > - debug("*** spi_xfer: ... %08x written, bitlen %d\n", > > > - tmpdout, bitlen); > > > + debug("%s: ... %08x written, bitlen %d\n", > > > + __func__, tmpdout, bitlen); > > > > > > /* > > > * Wait for SPI transmit to get out > > > @@ -67,8 +77,8 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > > if (readl(®->irq_cause) & KWSPI_SMEMRDIRQ) { > > > isread = 1; > > > tmpdin = readl(®->din); > > > - debug("spi_xfer: din %p..%08x read\n", > > > - din, tmpdin); > > > + debug("%s: din %p..%08x read\n", > > > + __func__, din, tmpdin); > > > > > > if (din) { > > > *((u8 *)din) = (u8)tmpdin; > > > @@ -82,179 +92,17 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > > break; > > > } > > > if (tm >= KWSPI_TIMEOUT) > > > - printf("*** spi_xfer: Time out during SPI transfer\n"); > > > + printf("%s: Time out during SPI transfer\n", __func__); > > > > > > debug("loopend bitlen %d\n", bitlen); > > > } > > > > > > if (flags & SPI_XFER_END) > > > - _spi_cs_deactivate(reg); > > > + spi_cs_deactivate(reg); > > > > > > return 0; > > > } > > > > > > -#ifndef CONFIG_DM_SPI > > > - > > > -static struct kwspi_registers *spireg = > > > - (struct kwspi_registers *)MVEBU_SPI_BASE; > > > - > > > -#ifdef CONFIG_KIRKWOOD > > > -static u32 cs_spi_mpp_back[2]; > > > -#endif > > > - > > > -struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, > > > - unsigned int max_hz, unsigned int mode) > > > -{ > > > - struct spi_slave *slave; > > > - u32 data; > > > -#ifdef CONFIG_KIRKWOOD > > > - static const u32 kwspi_mpp_config[2][2] = { > > > - { MPP0_SPI_SCn, 0 }, /* if cs == 0 */ > > > - { MPP7_SPI_SCn, 0 } /* if cs != 0 */ > > > - }; > > > -#endif > > > - > > > - if (!spi_cs_is_valid(bus, cs)) > > > - return NULL; > > > - > > > - slave = spi_alloc_slave_base(bus, cs); > > > - if (!slave) > > > - return NULL; > > > - > > > - writel(KWSPI_SMEMRDY, &spireg->ctrl); > > > - > > > - /* calculate spi clock prescaller using max_hz */ > > > - data = ((CONFIG_SYS_TCLK / 2) / max_hz) + 0x10; > > > - data = data < KWSPI_CLKPRESCL_MIN ? KWSPI_CLKPRESCL_MIN : data; > > > - data = data > KWSPI_CLKPRESCL_MASK ? KWSPI_CLKPRESCL_MASK : data; > > > - > > > - /* program spi clock prescaller using max_hz */ > > > - writel(KWSPI_ADRLEN_3BYTE | data, &spireg->cfg); > > > - debug("data = 0x%08x\n", data); > > > - > > > - writel(KWSPI_SMEMRDIRQ, &spireg->irq_cause); > > > - writel(KWSPI_IRQMASK, &spireg->irq_mask); > > > - > > > -#ifdef CONFIG_KIRKWOOD > > > - /* program mpp registers to select SPI_CSn */ > > > - kirkwood_mpp_conf(kwspi_mpp_config[cs ? 1 : 0], cs_spi_mpp_back); > > > -#endif > > > - > > > - return slave; > > > -} > > > - > > > -void spi_free_slave(struct spi_slave *slave) > > > -{ > > > -#ifdef CONFIG_KIRKWOOD > > > - kirkwood_mpp_conf(cs_spi_mpp_back, NULL); > > > -#endif > > > - free(slave); > > > -} > > > - > > > -#if defined(CONFIG_SYS_KW_SPI_MPP) > > > -u32 spi_mpp_backup[4]; > > > -#endif > > > - > > > -__attribute__((weak)) int board_spi_claim_bus(struct spi_slave *slave) > > > -{ > > > - return 0; > > > -} > > > - > > > -int spi_claim_bus(struct spi_slave *slave) > > > -{ > > > -#if defined(CONFIG_SYS_KW_SPI_MPP) > > > - u32 config; > > > - u32 spi_mpp_config[4]; > > > - > > > - config = CONFIG_SYS_KW_SPI_MPP; > > > - > > > - if (config & MOSI_MPP6) > > > - spi_mpp_config[0] = MPP6_SPI_MOSI; > > > - else > > > - spi_mpp_config[0] = MPP1_SPI_MOSI; > > > - > > > - if (config & SCK_MPP10) > > > - spi_mpp_config[1] = MPP10_SPI_SCK; > > > - else > > > - spi_mpp_config[1] = MPP2_SPI_SCK; > > > - > > > - if (config & MISO_MPP11) > > > - spi_mpp_config[2] = MPP11_SPI_MISO; > > > - else > > > - spi_mpp_config[2] = MPP3_SPI_MISO; > > > - > > > - spi_mpp_config[3] = 0; > > > - spi_mpp_backup[3] = 0; > > > - > > > - /* set new spi mpp and save current mpp config */ > > > - kirkwood_mpp_conf(spi_mpp_config, spi_mpp_backup); > > > -#endif > > > - > > > - return board_spi_claim_bus(slave); > > > -} > > > - > > > -__attribute__((weak)) void board_spi_release_bus(struct spi_slave *slave) > > > -{ > > > -} > > > - > > > -void spi_release_bus(struct spi_slave *slave) > > > -{ > > > -#if defined(CONFIG_SYS_KW_SPI_MPP) > > > - kirkwood_mpp_conf(spi_mpp_backup, NULL); > > > -#endif > > > - > > > - board_spi_release_bus(slave); > > > -} > > > - > > > -#ifndef CONFIG_SPI_CS_IS_VALID > > > -/* > > > - * you can define this function board specific > > > - * define above CONFIG in board specific config file and > > > - * provide the function in board specific src file > > > - */ > > > -int spi_cs_is_valid(unsigned int bus, unsigned int cs) > > > -{ > > > - return bus == 0 && (cs == 0 || cs == 1); > > > -} > > > -#endif > > > - > > > -void spi_init(void) > > > -{ > > > -} > > > - > > > -void spi_cs_activate(struct spi_slave *slave) > > > -{ > > > - _spi_cs_activate(spireg); > > > -} > > > - > > > -void spi_cs_deactivate(struct spi_slave *slave) > > > -{ > > > - _spi_cs_deactivate(spireg); > > > -} > > > - > > > -int spi_xfer(struct spi_slave *slave, unsigned int bitlen, > > > - const void *dout, void *din, unsigned long flags) > > > -{ > > > - return _spi_xfer(spireg, bitlen, dout, din, flags); > > > -} > > > - > > > -#else > > > - > > > -/* Here now the DM part */ > > > - > > > -struct mvebu_spi_dev { > > > - bool is_errata_50mhz_ac; > > > -}; > > > - > > > -struct mvebu_spi_platdata { > > > - struct kwspi_registers *spireg; > > > - bool is_errata_50mhz_ac; > > > -}; > > > - > > > -struct mvebu_spi_priv { > > > - struct kwspi_registers *spireg; > > > -}; > > > - > > > static int mvebu_spi_set_speed(struct udevice *bus, uint hz) > > > { > > > struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > > > @@ -329,15 +177,6 @@ static int mvebu_spi_set_mode(struct udevice *bus, uint mode) > > > return 0; > > > } > > > > > > -static int mvebu_spi_xfer(struct udevice *dev, unsigned int bitlen, > > > - const void *dout, void *din, unsigned long flags) > > > -{ > > > - struct udevice *bus = dev->parent; > > > - struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > > > - > > > - return _spi_xfer(plat->spireg, bitlen, dout, din, flags); > > > -} > > > - > > > static int mvebu_spi_claim_bus(struct udevice *dev) > > > { > > > struct udevice *bus = dev->parent; > > > @@ -351,6 +190,17 @@ static int mvebu_spi_claim_bus(struct udevice *dev) > > > return 0; > > > } > > > > > > +static const struct dm_spi_ops mvebu_spi_ops = { > > > + .claim_bus = mvebu_spi_claim_bus, > > > + .xfer = mvebu_spi_xfer, > > > + .set_speed = mvebu_spi_set_speed, > > > + .set_mode = mvebu_spi_set_mode, > > > + /* > > > + * cs_info is not needed, since we require all chip selects to be > > > + * in the device tree explicitly > > > + */ > > > +}; > > > > This was already added in commit 9985bdb1cea7 ("spi: kirkwood_spi.c: > > Add driver model support"). > > But this one is full conversion with platdata, no non-dm code. Sorry should have trimmed the response. I was just referring to the addtion of mvebu_spi_ops. The removal of the rest of the code is fine but there is still a compile error because mvebu_spi_ops is defined twice.
On Wed, Nov 21, 2018 at 2:29 PM Chris Packham <judge.packham@gmail.com> wrote: > > On Wed, Nov 21, 2018 at 9:39 PM Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > On Wed, Nov 21, 2018 at 1:22 PM Chris Packham <judge.packham@gmail.com> wrote: > > > > > > Hi Jagan, > > > On Wed, Nov 21, 2018 at 2:00 AM Jagan Teki <jagan@amarulasolutions.com> wrote: > > > > > > > > kirkwood now support dt along with platform data, > > > > respective boards need to switch into dm for the same. > > > > > > > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > > > > --- > > > > Makefile | 2 +- > > > > drivers/spi/Makefile | 2 +- > > > > drivers/spi/kirkwood_spi.c | 229 +++++------------------- > > > > drivers/spi/spi.c | 4 +- > > > > include/dm/platform_data/spi_kirkwood.h | 15 ++ > > > > 5 files changed, 61 insertions(+), 191 deletions(-) > > > > create mode 100644 include/dm/platform_data/spi_kirkwood.h > > > > > > > > diff --git a/Makefile b/Makefile > > > > index d06cb5c287..214f1bcdbf 100644 > > > > --- a/Makefile > > > > +++ b/Makefile > > > > @@ -919,7 +919,7 @@ ifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y) > > > > @echo "====================================================" > > > > endif > > > > ifeq ($(CONFIG_DM_SPI),) > > > > -ifeq ($(CONFIG_DAVINCI_SPI),y) > > > > +ifeq ($(filter $(CONFIG_DAVINCI_SPI) $(CONFIG_KIRKWOOD_SPI),y),y) > > > > @echo "===================== WARNING ======================" > > > > @echo "This board uses SPI driver from drivers/spi/ without" > > > > @echo "enabling CONFIG_DM_SPI. Please enable CONFIG_DM_SPI" > > > > diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile > > > > index cf5a5cccc0..3c74418992 100644 > > > > --- a/drivers/spi/Makefile > > > > +++ b/drivers/spi/Makefile > > > > @@ -7,6 +7,7 @@ > > > > ifdef CONFIG_DM_SPI > > > > obj-y += spi-uclass.o > > > > obj-$(CONFIG_DAVINCI_SPI) += davinci_spi.o > > > > +obj-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o > > > > obj-$(CONFIG_SANDBOX) += spi-emul-uclass.o > > > > obj-$(CONFIG_SOFT_SPI) += soft_spi.o > > > > obj-$(CONFIG_SPI_MEM) += spi-mem.o > > > > @@ -29,7 +30,6 @@ obj-$(CONFIG_FSL_DSPI) += fsl_dspi.o > > > > obj-$(CONFIG_FSL_ESPI) += fsl_espi.o > > > > obj-$(CONFIG_FSL_QSPI) += fsl_qspi.o > > > > obj-$(CONFIG_ICH_SPI) += ich.o > > > > -obj-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o > > > > obj-$(CONFIG_LPC32XX_SSP) += lpc32xx_ssp.o > > > > obj-$(CONFIG_MPC8XX_SPI) += mpc8xx_spi.o > > > > obj-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o > > > > diff --git a/drivers/spi/kirkwood_spi.c b/drivers/spi/kirkwood_spi.c > > > > index 5dd1ad67cf..e9ca95697f 100644 > > > > --- a/drivers/spi/kirkwood_spi.c > > > > +++ b/drivers/spi/kirkwood_spi.c > > > > @@ -13,31 +13,41 @@ > > > > #include <spi.h> > > > > #include <asm/io.h> > > > > #include <asm/arch/soc.h> > > > > -#ifdef CONFIG_KIRKWOOD > > > > -#include <asm/arch/mpp.h> > > > > -#endif > > > > #include <asm/arch-mvebu/spi.h> > > > > > > > > -static void _spi_cs_activate(struct kwspi_registers *reg) > > > > +#include <dm/platform_data/spi_kirkwood.h> > > > > + > > > > +struct mvebu_spi_dev { > > > > + bool is_errata_50mhz_ac; > > > > +}; > > > > + > > > > +struct mvebu_spi_priv { > > > > + struct kwspi_registers *spireg; > > > > +}; > > > > + > > > > +static void spi_cs_activate(struct kwspi_registers *reg) > > > > { > > > > setbits_le32(®->ctrl, KWSPI_CSN_ACT); > > > > } > > > > > > > > -static void _spi_cs_deactivate(struct kwspi_registers *reg) > > > > +static void spi_cs_deactivate(struct kwspi_registers *reg) > > > > { > > > > clrbits_le32(®->ctrl, KWSPI_CSN_ACT); > > > > } > > > > > > > > -static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > > > - const void *dout, void *din, unsigned long flags) > > > > +static int mvebu_spi_xfer(struct udevice *dev, unsigned int bitlen, > > > > + const void *dout, void *din, unsigned long flags) > > > > { > > > > + struct udevice *bus = dev->parent; > > > > + struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > > > > + struct kwspi_registers *reg = plat->spireg; > > > > unsigned int tmpdout, tmpdin; > > > > int tm, isread = 0; > > > > > > > > - debug("spi_xfer: dout %p din %p bitlen %u\n", dout, din, bitlen); > > > > + debug("%s: dout %p din %p bitlen %u\n", __func__, dout, din, bitlen); > > > > > > > > if (flags & SPI_XFER_BEGIN) > > > > - _spi_cs_activate(reg); > > > > + spi_cs_activate(reg); > > > > > > > > /* > > > > * handle data in 8-bit chunks > > > > @@ -55,8 +65,8 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > > > > > > > clrbits_le32(®->irq_cause, KWSPI_SMEMRDIRQ); > > > > writel(tmpdout, ®->dout); /* Write the data out */ > > > > - debug("*** spi_xfer: ... %08x written, bitlen %d\n", > > > > - tmpdout, bitlen); > > > > + debug("%s: ... %08x written, bitlen %d\n", > > > > + __func__, tmpdout, bitlen); > > > > > > > > /* > > > > * Wait for SPI transmit to get out > > > > @@ -67,8 +77,8 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > > > if (readl(®->irq_cause) & KWSPI_SMEMRDIRQ) { > > > > isread = 1; > > > > tmpdin = readl(®->din); > > > > - debug("spi_xfer: din %p..%08x read\n", > > > > - din, tmpdin); > > > > + debug("%s: din %p..%08x read\n", > > > > + __func__, din, tmpdin); > > > > > > > > if (din) { > > > > *((u8 *)din) = (u8)tmpdin; > > > > @@ -82,179 +92,17 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, > > > > break; > > > > } > > > > if (tm >= KWSPI_TIMEOUT) > > > > - printf("*** spi_xfer: Time out during SPI transfer\n"); > > > > + printf("%s: Time out during SPI transfer\n", __func__); > > > > > > > > debug("loopend bitlen %d\n", bitlen); > > > > } > > > > > > > > if (flags & SPI_XFER_END) > > > > - _spi_cs_deactivate(reg); > > > > + spi_cs_deactivate(reg); > > > > > > > > return 0; > > > > } > > > > > > > > -#ifndef CONFIG_DM_SPI > > > > - > > > > -static struct kwspi_registers *spireg = > > > > - (struct kwspi_registers *)MVEBU_SPI_BASE; > > > > - > > > > -#ifdef CONFIG_KIRKWOOD > > > > -static u32 cs_spi_mpp_back[2]; > > > > -#endif > > > > - > > > > -struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, > > > > - unsigned int max_hz, unsigned int mode) > > > > -{ > > > > - struct spi_slave *slave; > > > > - u32 data; > > > > -#ifdef CONFIG_KIRKWOOD > > > > - static const u32 kwspi_mpp_config[2][2] = { > > > > - { MPP0_SPI_SCn, 0 }, /* if cs == 0 */ > > > > - { MPP7_SPI_SCn, 0 } /* if cs != 0 */ > > > > - }; > > > > -#endif > > > > - > > > > - if (!spi_cs_is_valid(bus, cs)) > > > > - return NULL; > > > > - > > > > - slave = spi_alloc_slave_base(bus, cs); > > > > - if (!slave) > > > > - return NULL; > > > > - > > > > - writel(KWSPI_SMEMRDY, &spireg->ctrl); > > > > - > > > > - /* calculate spi clock prescaller using max_hz */ > > > > - data = ((CONFIG_SYS_TCLK / 2) / max_hz) + 0x10; > > > > - data = data < KWSPI_CLKPRESCL_MIN ? KWSPI_CLKPRESCL_MIN : data; > > > > - data = data > KWSPI_CLKPRESCL_MASK ? KWSPI_CLKPRESCL_MASK : data; > > > > - > > > > - /* program spi clock prescaller using max_hz */ > > > > - writel(KWSPI_ADRLEN_3BYTE | data, &spireg->cfg); > > > > - debug("data = 0x%08x\n", data); > > > > - > > > > - writel(KWSPI_SMEMRDIRQ, &spireg->irq_cause); > > > > - writel(KWSPI_IRQMASK, &spireg->irq_mask); > > > > - > > > > -#ifdef CONFIG_KIRKWOOD > > > > - /* program mpp registers to select SPI_CSn */ > > > > - kirkwood_mpp_conf(kwspi_mpp_config[cs ? 1 : 0], cs_spi_mpp_back); > > > > -#endif > > > > - > > > > - return slave; > > > > -} > > > > - > > > > -void spi_free_slave(struct spi_slave *slave) > > > > -{ > > > > -#ifdef CONFIG_KIRKWOOD > > > > - kirkwood_mpp_conf(cs_spi_mpp_back, NULL); > > > > -#endif > > > > - free(slave); > > > > -} > > > > - > > > > -#if defined(CONFIG_SYS_KW_SPI_MPP) > > > > -u32 spi_mpp_backup[4]; > > > > -#endif > > > > - > > > > -__attribute__((weak)) int board_spi_claim_bus(struct spi_slave *slave) > > > > -{ > > > > - return 0; > > > > -} > > > > - > > > > -int spi_claim_bus(struct spi_slave *slave) > > > > -{ > > > > -#if defined(CONFIG_SYS_KW_SPI_MPP) > > > > - u32 config; > > > > - u32 spi_mpp_config[4]; > > > > - > > > > - config = CONFIG_SYS_KW_SPI_MPP; > > > > - > > > > - if (config & MOSI_MPP6) > > > > - spi_mpp_config[0] = MPP6_SPI_MOSI; > > > > - else > > > > - spi_mpp_config[0] = MPP1_SPI_MOSI; > > > > - > > > > - if (config & SCK_MPP10) > > > > - spi_mpp_config[1] = MPP10_SPI_SCK; > > > > - else > > > > - spi_mpp_config[1] = MPP2_SPI_SCK; > > > > - > > > > - if (config & MISO_MPP11) > > > > - spi_mpp_config[2] = MPP11_SPI_MISO; > > > > - else > > > > - spi_mpp_config[2] = MPP3_SPI_MISO; > > > > - > > > > - spi_mpp_config[3] = 0; > > > > - spi_mpp_backup[3] = 0; > > > > - > > > > - /* set new spi mpp and save current mpp config */ > > > > - kirkwood_mpp_conf(spi_mpp_config, spi_mpp_backup); > > > > -#endif > > > > - > > > > - return board_spi_claim_bus(slave); > > > > -} > > > > - > > > > -__attribute__((weak)) void board_spi_release_bus(struct spi_slave *slave) > > > > -{ > > > > -} > > > > - > > > > -void spi_release_bus(struct spi_slave *slave) > > > > -{ > > > > -#if defined(CONFIG_SYS_KW_SPI_MPP) > > > > - kirkwood_mpp_conf(spi_mpp_backup, NULL); > > > > -#endif > > > > - > > > > - board_spi_release_bus(slave); > > > > -} > > > > - > > > > -#ifndef CONFIG_SPI_CS_IS_VALID > > > > -/* > > > > - * you can define this function board specific > > > > - * define above CONFIG in board specific config file and > > > > - * provide the function in board specific src file > > > > - */ > > > > -int spi_cs_is_valid(unsigned int bus, unsigned int cs) > > > > -{ > > > > - return bus == 0 && (cs == 0 || cs == 1); > > > > -} > > > > -#endif > > > > - > > > > -void spi_init(void) > > > > -{ > > > > -} > > > > - > > > > -void spi_cs_activate(struct spi_slave *slave) > > > > -{ > > > > - _spi_cs_activate(spireg); > > > > -} > > > > - > > > > -void spi_cs_deactivate(struct spi_slave *slave) > > > > -{ > > > > - _spi_cs_deactivate(spireg); > > > > -} > > > > - > > > > -int spi_xfer(struct spi_slave *slave, unsigned int bitlen, > > > > - const void *dout, void *din, unsigned long flags) > > > > -{ > > > > - return _spi_xfer(spireg, bitlen, dout, din, flags); > > > > -} > > > > - > > > > -#else > > > > - > > > > -/* Here now the DM part */ > > > > - > > > > -struct mvebu_spi_dev { > > > > - bool is_errata_50mhz_ac; > > > > -}; > > > > - > > > > -struct mvebu_spi_platdata { > > > > - struct kwspi_registers *spireg; > > > > - bool is_errata_50mhz_ac; > > > > -}; > > > > - > > > > -struct mvebu_spi_priv { > > > > - struct kwspi_registers *spireg; > > > > -}; > > > > - > > > > static int mvebu_spi_set_speed(struct udevice *bus, uint hz) > > > > { > > > > struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > > > > @@ -329,15 +177,6 @@ static int mvebu_spi_set_mode(struct udevice *bus, uint mode) > > > > return 0; > > > > } > > > > > > > > -static int mvebu_spi_xfer(struct udevice *dev, unsigned int bitlen, > > > > - const void *dout, void *din, unsigned long flags) > > > > -{ > > > > - struct udevice *bus = dev->parent; > > > > - struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > > > > - > > > > - return _spi_xfer(plat->spireg, bitlen, dout, din, flags); > > > > -} > > > > - > > > > static int mvebu_spi_claim_bus(struct udevice *dev) > > > > { > > > > struct udevice *bus = dev->parent; > > > > @@ -351,6 +190,17 @@ static int mvebu_spi_claim_bus(struct udevice *dev) > > > > return 0; > > > > } > > > > > > > > +static const struct dm_spi_ops mvebu_spi_ops = { > > > > + .claim_bus = mvebu_spi_claim_bus, > > > > + .xfer = mvebu_spi_xfer, > > > > + .set_speed = mvebu_spi_set_speed, > > > > + .set_mode = mvebu_spi_set_mode, > > > > + /* > > > > + * cs_info is not needed, since we require all chip selects to be > > > > + * in the device tree explicitly > > > > + */ > > > > +}; > > > > > > This was already added in commit 9985bdb1cea7 ("spi: kirkwood_spi.c: > > > Add driver model support"). > > > > But this one is full conversion with platdata, no non-dm code. > > Sorry should have trimmed the response. > > I was just referring to the addtion of mvebu_spi_ops. The removal of > the rest of the code is fine but there is still a compile error > because mvebu_spi_ops is defined twice. Yes, saw that twise defined will fix in v2.
diff --git a/Makefile b/Makefile index d06cb5c287..214f1bcdbf 100644 --- a/Makefile +++ b/Makefile @@ -919,7 +919,7 @@ ifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y) @echo "====================================================" endif ifeq ($(CONFIG_DM_SPI),) -ifeq ($(CONFIG_DAVINCI_SPI),y) +ifeq ($(filter $(CONFIG_DAVINCI_SPI) $(CONFIG_KIRKWOOD_SPI),y),y) @echo "===================== WARNING ======================" @echo "This board uses SPI driver from drivers/spi/ without" @echo "enabling CONFIG_DM_SPI. Please enable CONFIG_DM_SPI" diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile index cf5a5cccc0..3c74418992 100644 --- a/drivers/spi/Makefile +++ b/drivers/spi/Makefile @@ -7,6 +7,7 @@ ifdef CONFIG_DM_SPI obj-y += spi-uclass.o obj-$(CONFIG_DAVINCI_SPI) += davinci_spi.o +obj-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o obj-$(CONFIG_SANDBOX) += spi-emul-uclass.o obj-$(CONFIG_SOFT_SPI) += soft_spi.o obj-$(CONFIG_SPI_MEM) += spi-mem.o @@ -29,7 +30,6 @@ obj-$(CONFIG_FSL_DSPI) += fsl_dspi.o obj-$(CONFIG_FSL_ESPI) += fsl_espi.o obj-$(CONFIG_FSL_QSPI) += fsl_qspi.o obj-$(CONFIG_ICH_SPI) += ich.o -obj-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o obj-$(CONFIG_LPC32XX_SSP) += lpc32xx_ssp.o obj-$(CONFIG_MPC8XX_SPI) += mpc8xx_spi.o obj-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o diff --git a/drivers/spi/kirkwood_spi.c b/drivers/spi/kirkwood_spi.c index 5dd1ad67cf..e9ca95697f 100644 --- a/drivers/spi/kirkwood_spi.c +++ b/drivers/spi/kirkwood_spi.c @@ -13,31 +13,41 @@ #include <spi.h> #include <asm/io.h> #include <asm/arch/soc.h> -#ifdef CONFIG_KIRKWOOD -#include <asm/arch/mpp.h> -#endif #include <asm/arch-mvebu/spi.h> -static void _spi_cs_activate(struct kwspi_registers *reg) +#include <dm/platform_data/spi_kirkwood.h> + +struct mvebu_spi_dev { + bool is_errata_50mhz_ac; +}; + +struct mvebu_spi_priv { + struct kwspi_registers *spireg; +}; + +static void spi_cs_activate(struct kwspi_registers *reg) { setbits_le32(®->ctrl, KWSPI_CSN_ACT); } -static void _spi_cs_deactivate(struct kwspi_registers *reg) +static void spi_cs_deactivate(struct kwspi_registers *reg) { clrbits_le32(®->ctrl, KWSPI_CSN_ACT); } -static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, - const void *dout, void *din, unsigned long flags) +static int mvebu_spi_xfer(struct udevice *dev, unsigned int bitlen, + const void *dout, void *din, unsigned long flags) { + struct udevice *bus = dev->parent; + struct mvebu_spi_platdata *plat = dev_get_platdata(bus); + struct kwspi_registers *reg = plat->spireg; unsigned int tmpdout, tmpdin; int tm, isread = 0; - debug("spi_xfer: dout %p din %p bitlen %u\n", dout, din, bitlen); + debug("%s: dout %p din %p bitlen %u\n", __func__, dout, din, bitlen); if (flags & SPI_XFER_BEGIN) - _spi_cs_activate(reg); + spi_cs_activate(reg); /* * handle data in 8-bit chunks @@ -55,8 +65,8 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, clrbits_le32(®->irq_cause, KWSPI_SMEMRDIRQ); writel(tmpdout, ®->dout); /* Write the data out */ - debug("*** spi_xfer: ... %08x written, bitlen %d\n", - tmpdout, bitlen); + debug("%s: ... %08x written, bitlen %d\n", + __func__, tmpdout, bitlen); /* * Wait for SPI transmit to get out @@ -67,8 +77,8 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, if (readl(®->irq_cause) & KWSPI_SMEMRDIRQ) { isread = 1; tmpdin = readl(®->din); - debug("spi_xfer: din %p..%08x read\n", - din, tmpdin); + debug("%s: din %p..%08x read\n", + __func__, din, tmpdin); if (din) { *((u8 *)din) = (u8)tmpdin; @@ -82,179 +92,17 @@ static int _spi_xfer(struct kwspi_registers *reg, unsigned int bitlen, break; } if (tm >= KWSPI_TIMEOUT) - printf("*** spi_xfer: Time out during SPI transfer\n"); + printf("%s: Time out during SPI transfer\n", __func__); debug("loopend bitlen %d\n", bitlen); } if (flags & SPI_XFER_END) - _spi_cs_deactivate(reg); + spi_cs_deactivate(reg); return 0; } -#ifndef CONFIG_DM_SPI - -static struct kwspi_registers *spireg = - (struct kwspi_registers *)MVEBU_SPI_BASE; - -#ifdef CONFIG_KIRKWOOD -static u32 cs_spi_mpp_back[2]; -#endif - -struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, - unsigned int max_hz, unsigned int mode) -{ - struct spi_slave *slave; - u32 data; -#ifdef CONFIG_KIRKWOOD - static const u32 kwspi_mpp_config[2][2] = { - { MPP0_SPI_SCn, 0 }, /* if cs == 0 */ - { MPP7_SPI_SCn, 0 } /* if cs != 0 */ - }; -#endif - - if (!spi_cs_is_valid(bus, cs)) - return NULL; - - slave = spi_alloc_slave_base(bus, cs); - if (!slave) - return NULL; - - writel(KWSPI_SMEMRDY, &spireg->ctrl); - - /* calculate spi clock prescaller using max_hz */ - data = ((CONFIG_SYS_TCLK / 2) / max_hz) + 0x10; - data = data < KWSPI_CLKPRESCL_MIN ? KWSPI_CLKPRESCL_MIN : data; - data = data > KWSPI_CLKPRESCL_MASK ? KWSPI_CLKPRESCL_MASK : data; - - /* program spi clock prescaller using max_hz */ - writel(KWSPI_ADRLEN_3BYTE | data, &spireg->cfg); - debug("data = 0x%08x\n", data); - - writel(KWSPI_SMEMRDIRQ, &spireg->irq_cause); - writel(KWSPI_IRQMASK, &spireg->irq_mask); - -#ifdef CONFIG_KIRKWOOD - /* program mpp registers to select SPI_CSn */ - kirkwood_mpp_conf(kwspi_mpp_config[cs ? 1 : 0], cs_spi_mpp_back); -#endif - - return slave; -} - -void spi_free_slave(struct spi_slave *slave) -{ -#ifdef CONFIG_KIRKWOOD - kirkwood_mpp_conf(cs_spi_mpp_back, NULL); -#endif - free(slave); -} - -#if defined(CONFIG_SYS_KW_SPI_MPP) -u32 spi_mpp_backup[4]; -#endif - -__attribute__((weak)) int board_spi_claim_bus(struct spi_slave *slave) -{ - return 0; -} - -int spi_claim_bus(struct spi_slave *slave) -{ -#if defined(CONFIG_SYS_KW_SPI_MPP) - u32 config; - u32 spi_mpp_config[4]; - - config = CONFIG_SYS_KW_SPI_MPP; - - if (config & MOSI_MPP6) - spi_mpp_config[0] = MPP6_SPI_MOSI; - else - spi_mpp_config[0] = MPP1_SPI_MOSI; - - if (config & SCK_MPP10) - spi_mpp_config[1] = MPP10_SPI_SCK; - else - spi_mpp_config[1] = MPP2_SPI_SCK; - - if (config & MISO_MPP11) - spi_mpp_config[2] = MPP11_SPI_MISO; - else - spi_mpp_config[2] = MPP3_SPI_MISO; - - spi_mpp_config[3] = 0; - spi_mpp_backup[3] = 0; - - /* set new spi mpp and save current mpp config */ - kirkwood_mpp_conf(spi_mpp_config, spi_mpp_backup); -#endif - - return board_spi_claim_bus(slave); -} - -__attribute__((weak)) void board_spi_release_bus(struct spi_slave *slave) -{ -} - -void spi_release_bus(struct spi_slave *slave) -{ -#if defined(CONFIG_SYS_KW_SPI_MPP) - kirkwood_mpp_conf(spi_mpp_backup, NULL); -#endif - - board_spi_release_bus(slave); -} - -#ifndef CONFIG_SPI_CS_IS_VALID -/* - * you can define this function board specific - * define above CONFIG in board specific config file and - * provide the function in board specific src file - */ -int spi_cs_is_valid(unsigned int bus, unsigned int cs) -{ - return bus == 0 && (cs == 0 || cs == 1); -} -#endif - -void spi_init(void) -{ -} - -void spi_cs_activate(struct spi_slave *slave) -{ - _spi_cs_activate(spireg); -} - -void spi_cs_deactivate(struct spi_slave *slave) -{ - _spi_cs_deactivate(spireg); -} - -int spi_xfer(struct spi_slave *slave, unsigned int bitlen, - const void *dout, void *din, unsigned long flags) -{ - return _spi_xfer(spireg, bitlen, dout, din, flags); -} - -#else - -/* Here now the DM part */ - -struct mvebu_spi_dev { - bool is_errata_50mhz_ac; -}; - -struct mvebu_spi_platdata { - struct kwspi_registers *spireg; - bool is_errata_50mhz_ac; -}; - -struct mvebu_spi_priv { - struct kwspi_registers *spireg; -}; - static int mvebu_spi_set_speed(struct udevice *bus, uint hz) { struct mvebu_spi_platdata *plat = dev_get_platdata(bus); @@ -329,15 +177,6 @@ static int mvebu_spi_set_mode(struct udevice *bus, uint mode) return 0; } -static int mvebu_spi_xfer(struct udevice *dev, unsigned int bitlen, - const void *dout, void *din, unsigned long flags) -{ - struct udevice *bus = dev->parent; - struct mvebu_spi_platdata *plat = dev_get_platdata(bus); - - return _spi_xfer(plat->spireg, bitlen, dout, din, flags); -} - static int mvebu_spi_claim_bus(struct udevice *dev) { struct udevice *bus = dev->parent; @@ -351,6 +190,17 @@ static int mvebu_spi_claim_bus(struct udevice *dev) return 0; } +static const struct dm_spi_ops mvebu_spi_ops = { + .claim_bus = mvebu_spi_claim_bus, + .xfer = mvebu_spi_xfer, + .set_speed = mvebu_spi_set_speed, + .set_mode = mvebu_spi_set_mode, + /* + * cs_info is not needed, since we require all chip selects to be + * in the device tree explicitly + */ +}; + static int mvebu_spi_probe(struct udevice *bus) { struct mvebu_spi_platdata *plat = dev_get_platdata(bus); @@ -363,6 +213,7 @@ static int mvebu_spi_probe(struct udevice *bus) return 0; } +#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) static int mvebu_spi_ofdata_to_platdata(struct udevice *bus) { struct mvebu_spi_platdata *plat = dev_get_platdata(bus); @@ -421,15 +272,17 @@ static const struct udevice_id mvebu_spi_ids[] = { }, { } }; +#endif U_BOOT_DRIVER(mvebu_spi) = { .name = "mvebu_spi", .id = UCLASS_SPI, +#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) .of_match = mvebu_spi_ids, - .ops = &mvebu_spi_ops, .ofdata_to_platdata = mvebu_spi_ofdata_to_platdata, .platdata_auto_alloc_size = sizeof(struct mvebu_spi_platdata), +#endif + .ops = &mvebu_spi_ops, .priv_auto_alloc_size = sizeof(struct mvebu_spi_priv), .probe = mvebu_spi_probe, }; -#endif diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index ba1d1b082d..5181d5b83f 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -39,7 +39,9 @@ void *spi_do_alloc_slave(int offset, int size, unsigned int bus, return ptr; } -#if !defined(CONFIG_DM_SPI) && defined(CONFIG_DAVINCI_SPI) +#if !defined(CONFIG_DM_SPI) && \ + defined(CONFIG_DAVINCI_SPI) || \ + defined(CONFIG_KIRKWOOD_SPI) void spi_cs_activate(struct spi_slave *slave) { } diff --git a/include/dm/platform_data/spi_kirkwood.h b/include/dm/platform_data/spi_kirkwood.h new file mode 100644 index 0000000000..ae9b2783a9 --- /dev/null +++ b/include/dm/platform_data/spi_kirkwood.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2018 Jagan Teki <jagan@amarulasolutions.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __spi_kirkwood_h +#define __spi_kirkwood_h + +struct mvebu_spi_platdata { + struct kwspi_registers *spireg; + bool is_errata_50mhz_ac; +}; + +#endif /* __spi_kirkwood_h */
kirkwood now support dt along with platform data, respective boards need to switch into dm for the same. Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> --- Makefile | 2 +- drivers/spi/Makefile | 2 +- drivers/spi/kirkwood_spi.c | 229 +++++------------------- drivers/spi/spi.c | 4 +- include/dm/platform_data/spi_kirkwood.h | 15 ++ 5 files changed, 61 insertions(+), 191 deletions(-) create mode 100644 include/dm/platform_data/spi_kirkwood.h