Hi notthetup
Yes, we are reworked for SPI1A to SPI2A loopback and run spidev tests.
commands to be run:
-
to enable SPI2A pinmux
cat /sys/bus/platform/devices/7000d600.spi/force_unpacked_mode
-
spidev test:
MISO
./spidev_test -zz -D/dev/spidev1.0 -n1 -s10000000 -g16 -p1 -H -t -d1000000 &
./spidev_test -zz -D/dev/spidev0.0 -n1 -s10000000 -g16 -p1 -H -r
MOSI
./spidev_test -zz -D/dev/spidev1.0 -n1 -s10000000 -g16 -p1 -H -r -d1000000 &
./spidev_test -D/dev/spidev0.0 -n1 -s10000000 -g16 -p1 -H -t
Attached debug change that use to enable pinmux for SPI2A and run spidev tests.
diff --git a/arch/arm64/boot/dts/tegra210-ers-e2220-1170-a00-00-common.dts b/arch/arm64/boot/dts/tegra210-ers-e2220-1170-a00-00-common.dts
index 48e03b8..ea27954 100644
--- a/arch/arm64/boot/dts/tegra210-ers-e2220-1170-a00-00-common.dts
+++ b/arch/arm64/boot/dts/tegra210-ers-e2220-1170-a00-00-common.dts
@@ -244,6 +244,7 @@
spi@7000d400 {
status = "okay";
earSmart: earSmart-codec@0 {
+ status = "disabled";
compatible = "adnc,earSmart-codec";
reg = <0>;
spi-max-frequency = <6000000>;
@@ -631,6 +632,10 @@
};
};
+ spi@7000d600 {
+ status = "okay";
+ };
+
spi@7000da00 {
status = "okay";
spi-max-frequency = <25000000>;
diff --git a/arch/arm64/boot/dts/tegra210-platforms/tegra210-ers-pinmux-e2220-1170-a00.dtsi b/arch/arm64/boot/dts/tegra210-platforms/tegra210-ers-pinmux-e2220-1170-a00.dtsi
index 2ef66e7..a5f989d 100644
--- a/arch/arm64/boot/dts/tegra210-platforms/tegra210-ers-pinmux-e2220-1170-a00.dtsi
+++ b/arch/arm64/boot/dts/tegra210-platforms/tegra210-ers-pinmux-e2220-1170-a00.dtsi
@@ -699,6 +699,46 @@
nvidia,enable-input = <TEGRA_PIN_DISABLE>;
};
+ spi2_mosi_pb4 {
+ nvidia,pins = "spi2_mosi_pb4";
+ nvidia,function = "spi2";
+ nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+ nvidia,tristate = <TEGRA_PIN_DISABLE>;
+ nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+ };
+
+ spi2_miso_pb5 {
+ nvidia,pins = "spi2_miso_pb5";
+ nvidia,function = "spi2";
+ nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+ nvidia,tristate = <TEGRA_PIN_DISABLE>;
+ nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+ };
+
+ spi2_sck_pb6 {
+ nvidia,pins = "spi2_sck_pb6";
+ nvidia,function = "spi2";
+ nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+ nvidia,tristate = <TEGRA_PIN_DISABLE>;
+ nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+ };
+
+ spi2_cs0_pb7 {
+ nvidia,pins = "spi2_cs0_pb7";
+ nvidia,function = "spi2";
+ nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+ nvidia,tristate = <TEGRA_PIN_DISABLE>;
+ nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+ };
+
+ spi2_cs1_pdd0 {
+ nvidia,pins = "spi2_cs1_pdd0";
+ nvidia,function = "spi2";
+ nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+ nvidia,tristate = <TEGRA_PIN_DISABLE>;
+ nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+ };
+
uart3_tx_pd1 {
nvidia,pins = "uart3_tx_pd1";
nvidia,function = "uartc";
@@ -870,14 +910,6 @@
nvidia,enable-input = <TEGRA_PIN_ENABLE>;
};
- spi2_mosi_pb4 {
- nvidia,pins = "spi2_mosi_pb4";
- nvidia,function = "rsvd2";
- nvidia,pull = <TEGRA_PIN_PULL_UP>;
- nvidia,tristate = <TEGRA_PIN_DISABLE>;
- nvidia,enable-input = <TEGRA_PIN_ENABLE>;
- };
-
pe6 {
nvidia,pins = "pe6";
nvidia,function = "rsvd0";
@@ -1307,37 +1339,6 @@
};
pinmux_unused_lowpower: unused_lowpower {
- spi2_miso_pb5 {
- nvidia,pins = "spi2_miso_pb5";
- nvidia,function = "rsvd2";
- nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
- nvidia,tristate = <TEGRA_PIN_ENABLE>;
- nvidia,enable-input = <TEGRA_PIN_DISABLE>;
- };
-
- spi2_sck_pb6 {
- nvidia,pins = "spi2_sck_pb6";
- nvidia,function = "rsvd2";
- nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
- nvidia,tristate = <TEGRA_PIN_ENABLE>;
- nvidia,enable-input = <TEGRA_PIN_DISABLE>;
- };
-
- spi2_cs0_pb7 {
- nvidia,pins = "spi2_cs0_pb7";
- nvidia,function = "rsvd2";
- nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
- nvidia,tristate = <TEGRA_PIN_ENABLE>;
- nvidia,enable-input = <TEGRA_PIN_DISABLE>;
- };
-
- spi2_cs1_pdd0 {
- nvidia,pins = "spi2_cs1_pdd0";
- nvidia,function = "rsvd1";
- nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
- nvidia,tristate = <TEGRA_PIN_ENABLE>;
- nvidia,enable-input = <TEGRA_PIN_DISABLE>;
- };
};
drive_default: drive {
diff --git a/arch/arm64/boot/dts/tegra210-soc-base.dtsi b/arch/arm64/boot/dts/tegra210-soc-base.dtsi
index 7344057..a91f9b8 100644
--- a/arch/arm64/boot/dts/tegra210-soc-base.dtsi
+++ b/arch/arm64/boot/dts/tegra210-soc-base.dtsi
@@ -689,9 +689,38 @@
dmas = <&apbdma 15>, <&apbdma 15>;
dma-names = "rx", "tx";
nvidia,clk-parents = "pll_p", "clk_m";
- status = "disabled";
+ status = "okay";
+ spi0_0 {
+ compatible = "spidev";
+ reg = <0x0>;
+ spi-max-frequency = <0x1312d00>;
+ };
+ };
+
+ spi1: spi@7000d600 {
+ status = "okay";
+ compatible = "nvidia,tegra124-spi-slave";
+ reg = <0x0 0x7000d600 0x0 0x200>;
+ interrupts = <0 82 0x04>;
+ nvidia,dma-request-selector = <&apbdma 16>;
+ iommus = <&smmu TEGRA_SWGROUP_PPCS>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ dmas = <&apbdma 16>, <&apbdma 16>;
+ dma-names = "rx", "tx";
+ nvidia,clk-parents = "pll_p", "clk_m";
+ nvidia,rx-trigger-words = <0>;
+ spi1_0 {
+ compatible = "spidev";
+ reg = <0x0>;
+ spi-max-frequency = <0x1312d00>;
+ };
};
+ /* nvidia,clk-pin = "gpio_x5_aud_px5";
+ nvidia,gpio-slave-ready = <&gpio TEGRA_GPIO(K, 4) 0>; / *PK4* /
+ nvidia,gpio-slave-ready-active-high;*/
+/*
spi1: spi@7000d600 {
compatible = "nvidia,tegra210-spi";
reg = <0x0 0x7000d600 0x0 0x200>;
@@ -705,6 +734,7 @@
nvidia,clk-parents = "pll_p", "clk_m";
status = "disabled";
};
+*/
spi2: spi@7000d800 {
compatible = "nvidia,tegra210-spi";
diff --git a/arch/arm64/configs/tegra21_defconfig b/arch/arm64/configs/tegra21_defconfig
index 6b51b2d..48b1fe3 100644
--- a/arch/arm64/configs/tegra21_defconfig
+++ b/arch/arm64/configs/tegra21_defconfig
@@ -1,6 +1,7 @@
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
+CONFIG_FHANDLE=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_IKCONFIG=y
@@ -60,7 +61,6 @@ CONFIG_ARMV7_COMPAT=y
CONFIG_ZSMALLOC=y
CONFIG_SECCOMP=y
CONFIG_COMPAT=y
-CONFIG_FHANDLE=y
# CONFIG_HAS_WAKELOCK is not set
# CONFIG_WAKELOCK is not set
CONFIG_PM_RUNTIME=y
@@ -260,7 +260,6 @@ CONFIG_VETH=y
CONFIG_TIGON3=y
CONFIG_E1000E=y
CONFIG_IGB=m
-CONFIG_IGB_HWMON=y
CONFIG_R8169=y
CONFIG_SMC91X=y
CONFIG_SMSC911X=y
@@ -318,10 +317,11 @@ CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MUX=y
CONFIG_I2C_MUX_PCA954x=y
-CONFIG_I2C_IOEXPANDER_PCA9570=y
CONFIG_I2C_TEGRA=y
CONFIG_SPI=y
CONFIG_SPI_TEGRA114=y
+CONFIG_SPI_TEGRA114_SLAVE=y
+CONFIG_SPI_SPIDEV=y
CONFIG_PINCTRL_MAX77620=y
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_PCA953X=y
@@ -371,23 +371,22 @@ CONFIG_VIDEO_AD5823=y
CONFIG_VIDEO_DW9718=y
CONFIG_VIDEO_DW9714=y
CONFIG_VIDEO_MT9M114=y
-CONFIG_VIDEO_IMX185=y
+CONFIG_VIDEO_IMX219=y
CONFIG_VIDEO_CAMERA=y
# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
-CONFIG_VIDEO_I2C_OV5693=y
CONFIG_VIDEO_IMX214=y
-CONFIG_VIDEO_IMX219=y
-CONFIG_VIDEO_IMX274=y
-CONFIG_VIDEO_OV23850=y
CONFIG_VIDEO_LC898212=y
+CONFIG_VIDEO_I2C_OV5693=y
+CONFIG_VIDEO_OV23850=y
+CONFIG_VIDEO_IMX274=y
+CONFIG_VIDEO_IMX185=y
+CONFIG_I2C_IOEXPANDER_PCA9570=y
CONFIG_VIDEO_OUTPUT_CONTROL=y
CONFIG_FB=y
CONFIG_TEGRA_GRHOST=y
CONFIG_TEGRA_GRHOST_VII2C=y
CONFIG_TEGRA_DC=y
-CONFIG_TEGRA_DP=y
CONFIG_TEGRA_DSI=y
-CONFIG_TEGRA_DP=y
CONFIG_TEGRA_HDMI2_0=y
# CONFIG_TEGRA_CAMERA is not set
CONFIG_NVHOST_BONDOUT_CHECK=y
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index a5e37f6..61c801f 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -882,26 +882,26 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id)
if (i2c_dev->msg_buf_remaining)
tegra_i2c_empty_rx_fifo(i2c_dev);
else {
- dev_err(i2c_dev->dev, "--- register dump for buffer remain == 0----\n");
- dev_err(i2c_dev->dev, "I2C_CNFG - 0x%x\n",
+ dev_dbg(i2c_dev->dev, "--- register dump for buffer remain == 0----\n");
+ dev_dbg(i2c_dev->dev, "I2C_CNFG - 0x%x\n",
i2c_readl(i2c_dev, I2C_CNFG));
- dev_err(i2c_dev->dev, "I2C_PACKET_TRANSFER_STATUS - 0x%x\n",
+ dev_dbg(i2c_dev->dev, "I2C_PACKET_TRANSFER_STATUS - 0x%x\n",
i2c_readl(i2c_dev, I2C_PACKET_TRANSFER_STATUS));
- dev_err(i2c_dev->dev, "I2C_FIFO_CONTROL - 0x%x\n",
+ dev_dbg(i2c_dev->dev, "I2C_FIFO_CONTROL - 0x%x\n",
i2c_readl(i2c_dev, I2C_FIFO_CONTROL));
- dev_err(i2c_dev->dev, "I2C_FIFO_STATUS - 0x%x\n",
+ dev_dbg(i2c_dev->dev, "I2C_FIFO_STATUS - 0x%x\n",
i2c_readl(i2c_dev, I2C_FIFO_STATUS));
- dev_err(i2c_dev->dev, "I2C_INT_MASK - 0x%x\n",
+ dev_dbg(i2c_dev->dev, "I2C_INT_MASK - 0x%x\n",
i2c_readl(i2c_dev, I2C_INT_MASK));
- dev_err(i2c_dev->dev, "I2C_INT_STATUS - 0x%x\n",
+ dev_dbg(i2c_dev->dev, "I2C_INT_STATUS - 0x%x\n",
i2c_readl(i2c_dev, I2C_INT_STATUS));
- dev_err(i2c_dev->dev, "msg_err - 0x%x, msg_read - 0x%x, msg_add - 0x%x\n",
+ dev_dbg(i2c_dev->dev, "msg_err - 0x%x, msg_read - 0x%x, msg_add - 0x%x\n",
i2c_dev->msg_err, i2c_dev->msg_read, i2c_dev->msg_add);
if (i2c_dev->msgs) {
struct i2c_msg *msgs = i2c_dev->msgs;
int i;
for (i = 0; i < i2c_dev->msgs_num; i++)
- dev_err(i2c_dev->dev,
+ dev_dbg(i2c_dev->dev,
"msgs[%d] %c, addr=0x%04x, len=%d\n",
i, (msgs[i].flags & I2C_M_RD) ? 'R' : 'W',
msgs[i].addr, msgs[i].len);
@@ -1209,7 +1209,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,
ret = wait_for_completion_timeout(&i2c_dev->msg_complete,
TEGRA_I2C_TIMEOUT);
- if (ret == 0) {
+ if (0) {
dev_err(i2c_dev->dev, "--- register dump for debugging ----\n");
dev_err(i2c_dev->dev, "I2C_CNFG - 0x%x\n",
i2c_readl(i2c_dev, I2C_CNFG));
@@ -1247,7 +1247,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,
tegra_i2c_disable_packet_mode(i2c_dev);
if (ret == 0) {
- dev_err(i2c_dev->dev,
+ dev_dbg(i2c_dev->dev,
"i2c transfer timed out, addr 0x%04x, data 0x%02x\n",
msg->addr, msg->buf[0]);
diff --git a/drivers/spi/spi-tegra124-slave.c b/drivers/spi/spi-tegra124-slave.c
index 8d749b2..cdb51fa 100644
--- a/drivers/spi/spi-tegra124-slave.c
+++ b/drivers/spi/spi-tegra124-slave.c
@@ -360,6 +360,18 @@ static int tegra_spi_validate_request(struct spi_device *spi,
struct tegra_spi_data *tspi, struct spi_transfer *t);
static int tegra_clk_pin_control(bool enable, struct tegra_spi_data *tspi);
+#include "../../../arch/arm/mach-tegra/iomap.h"
+void __iomem *pinbase = IO_ADDRESS(0x70000000);
+
+void spi2_pinmux(void)
+{
+ writel(0x00000040, pinbase + 0x3064);
+ writel(0x00000040, pinbase + 0x3068);
+ writel(0x00000040, pinbase + 0x306c);
+ writel(0x00000040, pinbase + 0x3070);
+ writel(0x00000040, pinbase + 0x3074);
+}
+
#ifdef TEGRA_SPI_SLAVE_DEBUG
static ssize_t force_unpacked_mode_set(struct device *dev,
struct device_attribute *attr,
@@ -383,6 +395,7 @@ static ssize_t force_unpacked_mode_show(struct device *dev,
{
struct tegra_spi_data *tspi;
struct spi_master *master = dev_get_drvdata(dev);
+ spi2_pinmux();
if (master) {
tspi = spi_master_get_devdata(master);
return sprintf(buf, "%d", tspi->force_unpacked_mode);
@@ -1759,6 +1772,8 @@ static int tegra_spi_probe(struct platform_device *pdev)
tspi->dma_req_sel = pdata->dma_req_sel;
tspi->clock_always_on = pdata->is_clkon_always;
tspi->rx_trig_words = pdata->rx_trig_words;
+ tspi->clk_pin = NULL;
+#if 0
tspi->clk_pin = (char *)pdata->clk_pin;
if (tspi->clk_pin) {
tspi->clk_pin_state_enabled = true;
@@ -1781,7 +1796,7 @@ static int tegra_spi_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "Pin group name for clock line is not defined.\n");
goto exit_free_master;
}
-
+#endif
tspi->gpio_slave_ready = pdata->gpio_slave_ready;
tegra_clk_pin_control(false, tspi);