summaryrefslogtreecommitdiffstats
path: root/drivers/spi
diff options
context:
space:
mode:
authorAshutosh Patel <ashutoshp@nvidia.com>2015-11-26 05:55:54 -0500
committerSandeep Trasi <strasi@nvidia.com>2015-11-30 04:30:27 -0500
commit08a17723d8c736af91c48c6666cb34a0c3ddda9c (patch)
treecf007aba45bd5d36531d353ee9a51f8329eea4ab /drivers/spi
parentb85b7c9593359541871b533d511a6ebddd821676 (diff)
driver: qspi : Add qspi_out clock
Changes: - qspi_out clock is added to control sdr and ddr - Removed clk_source register write bug 200133422 Change-Id: I9e18b9bd11ed2030b69feb30ef75fc139c06147d Signed-off-by: Ashutosh Patel <ashutoshp@nvidia.com> Reviewed-on: http://git-master/r/836458 Reviewed-by: Amlan Kundu <akundu@nvidia.com> Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Sandeep Trasi <strasi@nvidia.com>
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/spi-tegra186-qspi.c118
1 files changed, 69 insertions, 49 deletions
diff --git a/drivers/spi/spi-tegra186-qspi.c b/drivers/spi/spi-tegra186-qspi.c
index f25a9f687..535f054dc 100644
--- a/drivers/spi/spi-tegra186-qspi.c
+++ b/drivers/spi/spi-tegra186-qspi.c
@@ -190,7 +190,6 @@
190#define CMD_TRANSFER 0 190#define CMD_TRANSFER 0
191#define ADDR_TRANSFER 1 191#define ADDR_TRANSFER 1
192#define DATA_TRANSFER 2 192#define DATA_TRANSFER 2
193#define CLK_SRC_QSPI 0x55C3000
194 193
195struct tegra_qspi_data { 194struct tegra_qspi_data {
196 struct device *dev; 195 struct device *dev;
@@ -198,12 +197,14 @@ struct tegra_qspi_data {
198 spinlock_t lock; 197 spinlock_t lock;
199 198
200 struct clk *clk; 199 struct clk *clk;
201 struct reset_control *rstc; 200 struct clk *sdr_ddr_clk;
201 struct reset_control *rstc;
202 void __iomem *base; 202 void __iomem *base;
203 phys_addr_t phys; 203 phys_addr_t phys;
204 unsigned irq; 204 unsigned irq;
205 int dma_req_sel; 205 int dma_req_sel;
206 bool clock_always_on; 206 bool clock_always_on;
207 bool is_ddr_mode;
207 u32 qspi_max_frequency; 208 u32 qspi_max_frequency;
208 u32 cur_speed; 209 u32 cur_speed;
209 u8 qspi_num_dummy_cycle; 210 u8 qspi_num_dummy_cycle;
@@ -223,7 +224,7 @@ struct tegra_qspi_data {
223 unsigned max_buf_size; 224 unsigned max_buf_size;
224 bool is_curr_dma_xfer; 225 bool is_curr_dma_xfer;
225 bool is_hw_based_cs; 226 bool is_hw_based_cs;
226 bool dcycle_non_cmbseq_mode; 227 bool dcycle_non_cmbseq_mode;
227 228
228 struct completion rx_dma_complete; 229 struct completion rx_dma_complete;
229 struct completion tx_dma_complete; 230 struct completion tx_dma_complete;
@@ -965,7 +966,8 @@ static int tegra_qspi_start_transfer_one(struct spi_device *spi,
965 bool is_single_xfer) 966 bool is_single_xfer)
966{ 967{
967 struct tegra_qspi_data *tqspi = spi_master_get_devdata(spi->master); 968 struct tegra_qspi_data *tqspi = spi_master_get_devdata(spi->master);
968 u32 speed, qspi_cs_timing2 = 0, clk_val = 0; 969 u32 speed, qspi_cs_timing2 = 0;
970 u32 actual_speed = 0;
969 u8 bits_per_word; 971 u8 bits_per_word;
970 unsigned total_fifo_words; 972 unsigned total_fifo_words;
971 int ret; 973 int ret;
@@ -974,7 +976,6 @@ static int tegra_qspi_start_transfer_one(struct spi_device *spi,
974 u8 bus_width = X1, num_dummy_cycles = 0; 976 u8 bus_width = X1, num_dummy_cycles = 0;
975 bool is_ddr = false; 977 bool is_ddr = false;
976 struct tegra_qspi_device_controller_data *cdata = spi->controller_data; 978 struct tegra_qspi_device_controller_data *cdata = spi->controller_data;
977 void __iomem *clk_base;
978 bits_per_word = t->bits_per_word; 979 bits_per_word = t->bits_per_word;
979 tqspi->cur_qspi = spi; 980 tqspi->cur_qspi = spi;
980 tqspi->cur_pos = 0; 981 tqspi->cur_pos = 0;
@@ -1010,37 +1011,6 @@ static int tegra_qspi_start_transfer_one(struct spi_device *spi,
1010 */ 1011 */
1011 is_ddr = get_sdr_ddr(t->delay_usecs); 1012 is_ddr = get_sdr_ddr(t->delay_usecs);
1012 bus_width = get_bus_width(t->delay_usecs); 1013 bus_width = get_bus_width(t->delay_usecs);
1013
1014#ifndef QSPI_BRINGUP_BUILD
1015 if (is_ddr) {
1016 ret = tegra_clk_cfg_ex(tqspi->clk, TEGRA_CLK_QSPI_DIV2_ENB, 1);
1017 if (ret) {
1018 dev_err(tqspi->dev, "Failed to set clk DIV2 %d\n", ret);
1019 return -EINVAL;
1020 }
1021 } else if (!cdata->ifddr_div2_sdr) {
1022 ret = tegra_clk_cfg_ex(tqspi->clk, TEGRA_CLK_QSPI_DIV2_ENB, 0);
1023 if (ret) {
1024 dev_err(tqspi->dev, "Failed to reset clk DIV2\n");
1025 return -EINVAL;
1026 }
1027 }
1028#else
1029 clk_base = ioremap(CLK_SRC_QSPI, 0x4);
1030 /* FixMe Add BPMP FW based APIS
1031 instead of Register based programming */
1032 if (is_ddr) {
1033 clk_val = readl(clk_base);
1034 clk_val |= 0x100;
1035 writel(clk_val, clk_base);
1036 } else {
1037 clk_val = readl(clk_base);
1038 clk_val &= 0xFFFFFEFF;
1039 writel(clk_val, clk_base);
1040 }
1041 udelay(10);
1042 iounmap(clk_base);
1043#endif
1044 ret = tegra_qspi_validate_request(spi, tqspi, t, is_ddr); 1014 ret = tegra_qspi_validate_request(spi, tqspi, t, is_ddr);
1045 if (ret) 1015 if (ret)
1046 return ret; 1016 return ret;
@@ -1049,12 +1019,27 @@ static int tegra_qspi_start_transfer_one(struct spi_device *spi,
1049 if (speed != tqspi->cur_speed) { 1019 if (speed != tqspi->cur_speed) {
1050 ret = clk_set_rate(tqspi->clk, speed); 1020 ret = clk_set_rate(tqspi->clk, speed);
1051 if (ret) { 1021 if (ret) {
1052 dev_err(tqspi->dev, "Failed to set clk freq %d\n", ret); 1022 dev_err(tqspi->dev,
1023 "Failed to set qspi clk freq %d\n", ret);
1053 return -EINVAL; 1024 return -EINVAL;
1054 } 1025 }
1055 tqspi->cur_speed = speed; 1026 tqspi->cur_speed = speed;
1056 } 1027 }
1057 1028 if (is_ddr != tqspi->is_ddr_mode) {
1029 actual_speed = clk_get_rate(tqspi->clk);
1030 if (is_ddr)
1031 ret = clk_set_rate(tqspi->sdr_ddr_clk,
1032 (actual_speed>>1));
1033 else
1034 ret = clk_set_rate(tqspi->sdr_ddr_clk, actual_speed);
1035 if (ret) {
1036 dev_err(tqspi->dev,
1037 "Failed to set qspi_out clk freq %d\n"
1038 , ret);
1039 return -EINVAL;
1040 }
1041 tqspi->is_ddr_mode = is_ddr;
1042 }
1058 if (is_first_of_msg) { 1043 if (is_first_of_msg) {
1059 tegra_qspi_clear_status(tqspi); 1044 tegra_qspi_clear_status(tqspi);
1060 1045
@@ -1111,15 +1096,15 @@ static int tegra_qspi_start_transfer_one(struct spi_device *spi,
1111 int rx_tap_delay; 1096 int rx_tap_delay;
1112 int tx_tap_delay; 1097 int tx_tap_delay;
1113 1098
1114 if(cdata->rx_tap_delay) { 1099 if (cdata->rx_tap_delay) {
1115 rx_tap_delay = min(cdata->tx_clk_tap_delay, 63); 1100 rx_tap_delay = min(cdata->tx_clk_tap_delay, 63);
1116 command2_reg = QSPI_RX_TAP_DELAY(rx_tap_delay); 1101 command2_reg = QSPI_RX_TAP_DELAY(rx_tap_delay);
1117 } 1102 }
1118 if(cdata->tx_tap_delay) { 1103 if (cdata->tx_tap_delay) {
1119 tx_tap_delay = min(cdata->tx_clk_tap_delay, 63); 1104 tx_tap_delay = min(cdata->tx_clk_tap_delay, 63);
1120 command2_reg |= QSPI_TX_TAP_DELAY(tx_tap_delay); 1105 command2_reg |= QSPI_TX_TAP_DELAY(tx_tap_delay);
1121 } 1106 }
1122 if((cdata->rx_tap_delay) || (cdata->tx_tap_delay)) 1107 if ((cdata->rx_tap_delay) || (cdata->tx_tap_delay))
1123 tegra_qspi_writel(tqspi, command2_reg, QSPI_COMMAND2); 1108 tegra_qspi_writel(tqspi, command2_reg, QSPI_COMMAND2);
1124 } 1109 }
1125 1110
@@ -1803,6 +1788,14 @@ static int tegra_qspi_probe(struct platform_device *pdev)
1803 goto exit_free_irq; 1788 goto exit_free_irq;
1804 } 1789 }
1805 1790
1791 tqspi->sdr_ddr_clk = devm_clk_get(&pdev->dev, "qspi_out");
1792 if (IS_ERR(tqspi->sdr_ddr_clk)) {
1793 dev_err(&pdev->dev, "can not get clock\n");
1794 ret = PTR_ERR(tqspi->sdr_ddr_clk);
1795 goto exit_free_irq;
1796 }
1797 /* Set default mode to SDR */
1798 tqspi->is_ddr_mode = false;
1806 tqspi->max_buf_size = QSPI_FIFO_DEPTH << 2; 1799 tqspi->max_buf_size = QSPI_FIFO_DEPTH << 2;
1807 tqspi->dma_buf_size = DEFAULT_SPI_DMA_BUF_LEN; 1800 tqspi->dma_buf_size = DEFAULT_SPI_DMA_BUF_LEN;
1808 tqspi->qspi_max_frequency = pdata->qspi_max_frequency; 1801 tqspi->qspi_max_frequency = pdata->qspi_max_frequency;
@@ -1829,9 +1822,17 @@ static int tegra_qspi_probe(struct platform_device *pdev)
1829 if (tqspi->clock_always_on) { 1822 if (tqspi->clock_always_on) {
1830 ret = clk_prepare_enable(tqspi->clk); 1823 ret = clk_prepare_enable(tqspi->clk);
1831 if (ret < 0) { 1824 if (ret < 0) {
1832 dev_err(tqspi->dev, "clk_prepare failed: %d\n", ret); 1825 dev_err(tqspi->dev, "clk_prepare failed qspi clk: %d\n"
1826 , ret);
1827 goto exit_deinit_dma;
1828 }
1829 ret = clk_prepare_enable(tqspi->sdr_ddr_clk);
1830 if (ret < 0) {
1831 dev_err(tqspi->dev, "clk_prepare failed for qspi_out clk: %d\n"
1832 , ret);
1833 goto exit_deinit_dma; 1833 goto exit_deinit_dma;
1834 } 1834 }
1835
1835 } 1836 }
1836 1837
1837 pm_runtime_enable(&pdev->dev); 1838 pm_runtime_enable(&pdev->dev);
@@ -1880,8 +1881,10 @@ exit_pm_disable:
1880 pm_runtime_disable(&pdev->dev); 1881 pm_runtime_disable(&pdev->dev);
1881 if (!pm_runtime_status_suspended(&pdev->dev)) 1882 if (!pm_runtime_status_suspended(&pdev->dev))
1882 tegra_qspi_runtime_suspend(&pdev->dev); 1883 tegra_qspi_runtime_suspend(&pdev->dev);
1883 if (tqspi->clock_always_on) 1884 if (tqspi->clock_always_on) {
1885 clk_disable_unprepare(tqspi->sdr_ddr_clk);
1884 clk_disable_unprepare(tqspi->clk); 1886 clk_disable_unprepare(tqspi->clk);
1887 }
1885exit_deinit_dma: 1888exit_deinit_dma:
1886 tegra_qspi_deinit_dma_param(tqspi, false); 1889 tegra_qspi_deinit_dma_param(tqspi, false);
1887exit_rx_dma_free: 1890exit_rx_dma_free:
@@ -1913,8 +1916,10 @@ static int tegra_qspi_remove(struct platform_device *pdev)
1913 if (!pm_runtime_status_suspended(&pdev->dev)) 1916 if (!pm_runtime_status_suspended(&pdev->dev))
1914 tegra_qspi_runtime_suspend(&pdev->dev); 1917 tegra_qspi_runtime_suspend(&pdev->dev);
1915 1918
1916 if (tqspi->clock_always_on) 1919 if (tqspi->clock_always_on) {
1920 clk_disable_unprepare(tqspi->sdr_ddr_clk);
1917 clk_disable_unprepare(tqspi->clk); 1921 clk_disable_unprepare(tqspi->clk);
1922 }
1918 return 0; 1923 return 0;
1919} 1924}
1920#ifdef CONFIG_PM_SLEEP 1925#ifdef CONFIG_PM_SLEEP
@@ -1926,9 +1931,10 @@ static int tegra_qspi_suspend(struct device *dev)
1926 1931
1927 ret = spi_master_suspend(master); 1932 ret = spi_master_suspend(master);
1928 1933
1929 if (tqspi->clock_always_on) 1934 if (tqspi->clock_always_on) {
1935 clk_disable_unprepare(tqspi->sdr_ddr_clk);
1930 clk_disable_unprepare(tqspi->clk); 1936 clk_disable_unprepare(tqspi->clk);
1931 1937 }
1932 return ret; 1938 return ret;
1933} 1939}
1934 1940
@@ -1941,11 +1947,17 @@ static int tegra_qspi_resume(struct device *dev)
1941 if (tqspi->clock_always_on) { 1947 if (tqspi->clock_always_on) {
1942 ret = clk_prepare_enable(tqspi->clk); 1948 ret = clk_prepare_enable(tqspi->clk);
1943 if (ret < 0) { 1949 if (ret < 0) {
1944 dev_err(tqspi->dev, "clk_prepare failed: %d\n", ret); 1950 dev_err(tqspi->dev, "clk_prepare failed for qspi clk: %d\n"
1951 , ret);
1952 return ret;
1953 }
1954 ret = clk_prepare_enable(tqspi->sdr_ddr_clk);
1955 if (ret < 0) {
1956 dev_err(tqspi->dev, "clk_prepare failed for qspi_out clk: %d\n"
1957 , ret);
1945 return ret; 1958 return ret;
1946 } 1959 }
1947 } 1960 }
1948
1949 ret = pm_runtime_get_sync(dev); 1961 ret = pm_runtime_get_sync(dev);
1950 if (ret < 0) { 1962 if (ret < 0) {
1951 dev_err(dev, "pm runtime failed, e = %d\n", ret); 1963 dev_err(dev, "pm runtime failed, e = %d\n", ret);
@@ -1966,6 +1978,7 @@ static int tegra_qspi_runtime_suspend(struct device *dev)
1966 /* Flush all write which are in PPSB queue by reading back */ 1978 /* Flush all write which are in PPSB queue by reading back */
1967 tegra_qspi_readl(tqspi, QSPI_COMMAND1); 1979 tegra_qspi_readl(tqspi, QSPI_COMMAND1);
1968 1980
1981 clk_disable_unprepare(tqspi->sdr_ddr_clk);
1969 clk_disable_unprepare(tqspi->clk); 1982 clk_disable_unprepare(tqspi->clk);
1970 return 0; 1983 return 0;
1971} 1984}
@@ -1978,7 +1991,14 @@ static int tegra_qspi_runtime_resume(struct device *dev)
1978 1991
1979 ret = clk_prepare_enable(tqspi->clk); 1992 ret = clk_prepare_enable(tqspi->clk);
1980 if (ret < 0) { 1993 if (ret < 0) {
1981 dev_err(tqspi->dev, "clk_prepare failed: %d\n", ret); 1994 dev_err(tqspi->dev, "clk_prepare failed for qspi clk: %d\n"
1995 , ret);
1996 return ret;
1997 }
1998 ret = clk_prepare_enable(tqspi->sdr_ddr_clk);
1999 if (ret < 0) {
2000 dev_err(tqspi->dev, "clk_prepare failed for qspi_out clk: %d\n"
2001 , ret);
1982 return ret; 2002 return ret;
1983 } 2003 }
1984 return 0; 2004 return 0;