From mboxrd@z Thu Jan 1 00:00:00 1970 From: Neil Armstrong Subject: Re: [PATCH v2 1/3] spi: meson-axg: support MAX 80M clock Date: Thu, 13 Dec 2018 09:49:05 +0100 Message-ID: <2d438907-91b5-7443-24f9-57a406aaa040@baylibre.com> References: <1544690354-16409-1-git-send-email-sunny.luo@amlogic.com> <1544690354-16409-2-git-send-email-sunny.luo@amlogic.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: Yixun Lan , Jerome Brunet , Kevin Hilman , Carlo Caione , Jianxin Pan , Xingyu Chen , linux-spi@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org To: Sunny Luo , Mark Brown Return-path: In-Reply-To: <1544690354-16409-2-git-send-email-sunny.luo@amlogic.com> Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-spi.vger.kernel.org Hi Sunny, On 13/12/2018 09:39, Sunny Luo wrote: > The SPICC controller in Meson-AXG is capable of running at 80M clock. > The ASIC IP is improved and the clock is actually running higher than > previous old SoCs. > > Signed-off-by: Sunny Luo > Signed-off-by: Yixun Lan > --- > drivers/spi/spi-meson-spicc.c | 37 +++++++++++++++++++++++++++++-------- > 1 file changed, 29 insertions(+), 8 deletions(-) > > diff --git a/drivers/spi/spi-meson-spicc.c b/drivers/spi/spi-meson-spicc.c > index 7fe4488..b56249d 100644 > --- a/drivers/spi/spi-meson-spicc.c > +++ b/drivers/spi/spi-meson-spicc.c > @@ -9,11 +9,13 @@ > > #include > #include > +#include > #include > #include > #include > #include > #include > +#include > #include > #include > #include > @@ -34,7 +36,6 @@ > * to have a CS go down over the full transfer > */ > > -#define SPICC_MAX_FREQ 30000000 > #define SPICC_MAX_BURST 128 > > /* Register Map */ > @@ -120,6 +121,10 @@ > #define SPICC_BURST_MAX 16 > #define SPICC_FIFO_HALF 10 > > +struct meson_spicc_data { > + unsigned int max_speed_hz; > +}; > + > struct meson_spicc_device { > struct spi_master *master; > struct platform_device *pdev; > @@ -127,6 +132,7 @@ struct meson_spicc_device { > struct clk *core; > struct spi_message *message; > struct spi_transfer *xfer; > + const struct meson_spicc_data *data; > u8 *tx_buf; > u8 *rx_buf; > unsigned int bytes_per_word; > @@ -517,6 +523,9 @@ static int meson_spicc_probe(struct platform_device *pdev) > spicc->pdev = pdev; > platform_set_drvdata(pdev, spicc); > > + spicc->data = (const struct meson_spicc_data *) > + of_device_get_match_data(&pdev->dev); > + > res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > spicc->base = devm_ioremap_resource(&pdev->dev, res); > if (IS_ERR(spicc->base)) { > @@ -567,11 +576,9 @@ static int meson_spicc_probe(struct platform_device *pdev) > master->unprepare_transfer_hardware = meson_spicc_unprepare_transfer; > master->transfer_one = meson_spicc_transfer_one; > > - /* Setup max rate according to the Meson GX datasheet */ > - if ((rate >> 2) > SPICC_MAX_FREQ) > - master->max_speed_hz = SPICC_MAX_FREQ; > - else > - master->max_speed_hz = rate >> 2; > + /* Setup max rate according to the Meson datasheet */ > + master->max_speed_hz = min_t(unsigned int, rate >> 1, > + spicc->data->max_speed_hz); I think "rate >> 1" here depends on patch 3, either move patch 3 before this one or keep "rate >> 2" and change it back to "rate >> 1" on patch 3. > > ret = devm_spi_register_master(&pdev->dev, master); > if (ret) { > @@ -602,9 +609,23 @@ static int meson_spicc_remove(struct platform_device *pdev) > return 0; > } > > +static const struct meson_spicc_data meson_spicc_gx_data = { > + .max_speed_hz = 30000000, > +}; > + > +static const struct meson_spicc_data meson_spicc_axg_data = { > + .max_speed_hz = 80000000, > +}; > + > static const struct of_device_id meson_spicc_of_match[] = { > - { .compatible = "amlogic,meson-gx-spicc", }, > - { .compatible = "amlogic,meson-axg-spicc", }, > + { > + .compatible = "amlogic,meson-gx-spicc", > + .data = &meson_spicc_gx_data, > + }, > + { > + .compatible = "amlogic,meson-axg-spicc", > + .data = &meson_spicc_axg_data, > + }, > { /* sentinel */ } > }; > MODULE_DEVICE_TABLE(of, meson_spicc_of_match); >