public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH V5 0/5] x86: a bridge from PCI to AMBA
@ 2013-02-20 21:22 Alessandro Rubini
  2013-02-20 21:23 ` [PATCH V5 1/5] DMA: PL330: use prefix in reg names to build under x86 Alessandro Rubini
                   ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:22 UTC (permalink / raw)
  To: linux-kernel; +Cc: Giancarlo Asnaghi, Davide Ciminaghi, tglx, mingo, hpa, x86

This is a repost of patches I sent quite some time ago and are
available from the "tip" repository, as branch "x86/amba" based on
v3.7.  That branch includes 7 patches but two of them are already
upstream. Some of the other 5 had minor conflicts during rebase, but
only in the initial "#include" area.

I repost as Peter Anvin suggested. The commits in the tip
repository included both hpa's signed off (which I left in)
and the reference to the previous lkml message, which I removed
as it is not current by the time  this message exists.

Some acked-by we received on the mailing list are not in the patch set
because they are missing from tip::x86/amba which is authoritative.

Alessandro Rubini (5):
  DMA: PL330: use prefix in reg names to build under x86
  watchdog: sp805_wdt depends on ARM
  mmc: Use the new <linux/sizes.h>
  drivers/amba: add support for a PCI bridge
  x86: add CONFIG_ARM_AMBA, selected by STA2X11

 arch/x86/Kconfig            |    4 ++
 drivers/Kconfig             |    2 +
 drivers/amba/Kconfig        |   10 ++++
 drivers/amba/Makefile       |    1 +
 drivers/amba/pci-amba.c     |   93 +++++++++++++++++++++++++++++++++++++
 drivers/dma/pl330.c         |  107 ++++++++++++++++++++++---------------------
 drivers/mmc/host/mmci.c     |    2 +-
 drivers/mmc/host/msm_sdcc.c |    2 +-
 drivers/mmc/host/mvsdio.c   |    2 +-
 drivers/mmc/host/mxcmmc.c   |    2 +-
 drivers/mmc/host/pxamci.c   |    3 +-
 drivers/watchdog/Kconfig    |    2 +-
 12 files changed, 170 insertions(+), 60 deletions(-)
 create mode 100644 drivers/amba/Kconfig
 create mode 100644 drivers/amba/pci-amba.c

-- 
1.7.7.2

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH V5 1/5] DMA: PL330: use prefix in reg names to build under x86
  2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
@ 2013-02-20 21:23 ` Alessandro Rubini
  2013-02-20 21:23 ` [PATCH V5 2/5] watchdog: sp805_wdt depends on ARM Alessandro Rubini
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: Giancarlo Asnaghi, Davide Ciminaghi, jassisinghbrar, tglx, mingo,
	hpa, x86

This driver would not compile if ARM_AMBA is selected under x86,
because "CS" and "DS" are already defined there.  But AMBA
is used in the x86 world by a PCI-to-AMBA bridge, to be submitted.

The patch just adds the "PL330_" prefix to all registers,
so it can be built by randomconfig after ARM_AMBA appears within x86.
No other technical changes have been performed.
The patch was build-tested only.

Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
Signed-off-by: Davide Ciminaghi <ciminaghi@gnudd.com>
Acked-by: Jassi Brar <jassisinghbrar@gmail.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---

@Jassi: I repost this after rebasing, on hpa's suggestion.

 drivers/dma/pl330.c |  107 ++++++++++++++++++++++++++-------------------------
 1 files changed, 54 insertions(+), 53 deletions(-)

diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index 7181531..b45cbe0 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -70,7 +70,7 @@ enum pl330_reqtype {
 };
 
 /* Register and Bit field Definitions */
-#define DS			0x0
+#define PL330_DS		0x0
 #define DS_ST_STOP		0x0
 #define DS_ST_EXEC		0x1
 #define DS_ST_CMISS		0x2
@@ -84,33 +84,33 @@ enum pl330_reqtype {
 #define DS_ST_FLTCMP		0xe
 #define DS_ST_FAULT		0xf
 
-#define DPC			0x4
-#define INTEN			0x20
-#define ES			0x24
-#define INTSTATUS		0x28
-#define INTCLR			0x2c
-#define FSM			0x30
-#define FSC			0x34
-#define FTM			0x38
+#define PL330_DPC		0x4
+#define PL330_INTEN		0x20
+#define PL330_ES		0x24
+#define PL330_INTSTATUS		0x28
+#define PL330_INTCLR		0x2c
+#define PL330_FSM		0x30
+#define PL330_FSC		0x34
+#define PL330_FTM		0x38
 
 #define _FTC			0x40
-#define FTC(n)			(_FTC + (n)*0x4)
+#define PL330_FTC(n)		(_FTC + (n)*0x4)
 
 #define _CS			0x100
-#define CS(n)			(_CS + (n)*0x8)
+#define PL330_CS(n)		(_CS + (n)*0x8)
 #define CS_CNS			(1 << 21)
 
 #define _CPC			0x104
-#define CPC(n)			(_CPC + (n)*0x8)
+#define PL330_CPC(n)		(_CPC + (n)*0x8)
 
 #define _SA			0x400
-#define SA(n)			(_SA + (n)*0x20)
+#define PL330_SA(n)		(_SA + (n)*0x20)
 
 #define _DA			0x404
-#define DA(n)			(_DA + (n)*0x20)
+#define PL330_DA(n)		(_DA + (n)*0x20)
 
 #define _CC			0x408
-#define CC(n)			(_CC + (n)*0x20)
+#define PL330_CC(n)		(_CC + (n)*0x20)
 
 #define CC_SRCINC		(1 << 0)
 #define CC_DSTINC		(1 << 14)
@@ -131,24 +131,24 @@ enum pl330_reqtype {
 #define CC_SWAP_SHFT		28
 
 #define _LC0			0x40c
-#define LC0(n)			(_LC0 + (n)*0x20)
+#define PL330_LC0(n)		(_LC0 + (n)*0x20)
 
 #define _LC1			0x410
-#define LC1(n)			(_LC1 + (n)*0x20)
+#define PL330_LC1(n)		(_LC1 + (n)*0x20)
 
-#define DBGSTATUS		0xd00
+#define PL330_DBGSTATUS		0xd00
 #define DBG_BUSY		(1 << 0)
 
-#define DBGCMD			0xd04
-#define DBGINST0		0xd08
-#define DBGINST1		0xd0c
+#define PL330_DBGCMD		0xd04
+#define PL330_DBGINST0		0xd08
+#define PL330_DBGINST1		0xd0c
 
-#define CR0			0xe00
-#define CR1			0xe04
-#define CR2			0xe08
-#define CR3			0xe0c
-#define CR4			0xe10
-#define CRD			0xe14
+#define PL330_CR0		0xe00
+#define PL330_CR1		0xe04
+#define PL330_CR2		0xe08
+#define PL330_CR3		0xe0c
+#define PL330_CR4		0xe10
+#define PL330_CRD		0xe14
 
 #define PERIPH_ID		0xfe0
 #define PERIPH_REV_SHIFT	20
@@ -1022,7 +1022,7 @@ static bool _until_dmac_idle(struct pl330_thread *thrd)
 
 	do {
 		/* Until Manager is Idle */
-		if (!(readl(regs + DBGSTATUS) & DBG_BUSY))
+		if (!(readl(regs + PL330_DBGSTATUS) & DBG_BUSY))
 			break;
 
 		cpu_relax();
@@ -1045,10 +1045,10 @@ static inline void _execute_DBGINSN(struct pl330_thread *thrd,
 		val |= (1 << 0);
 		val |= (thrd->id << 8); /* Channel Number */
 	}
-	writel(val, regs + DBGINST0);
+	writel(val, regs + PL330_DBGINST0);
 
 	val = *((u32 *)&insn[2]);
-	writel(val, regs + DBGINST1);
+	writel(val, regs + PL330_DBGINST1);
 
 	/* If timed out due to halted state-machine */
 	if (_until_dmac_idle(thrd)) {
@@ -1057,7 +1057,7 @@ static inline void _execute_DBGINSN(struct pl330_thread *thrd,
 	}
 
 	/* Get going */
-	writel(0, regs + DBGCMD);
+	writel(0, regs + PL330_DBGCMD);
 }
 
 /*
@@ -1082,9 +1082,9 @@ static inline u32 _state(struct pl330_thread *thrd)
 	u32 val;
 
 	if (is_manager(thrd))
-		val = readl(regs + DS) & 0xf;
+		val = readl(regs + PL330_DS) & 0xf;
 	else
-		val = readl(regs + CS(thrd->id)) & 0xf;
+		val = readl(regs + PL330_CS(thrd->id)) & 0xf;
 
 	switch (val) {
 	case DS_ST_STOP:
@@ -1151,7 +1151,8 @@ static void _stop(struct pl330_thread *thrd)
 	_emit_KILL(0, insn);
 
 	/* Stop generating interrupts for SEV */
-	writel(readl(regs + INTEN) & ~(1 << thrd->ev), regs + INTEN);
+	writel(readl(regs + PL330_INTEN) & ~(1 << thrd->ev),
+	       regs + PL330_INTEN);
 
 	_execute_DBGINSN(thrd, insn, is_manager(thrd));
 }
@@ -1190,7 +1191,7 @@ static bool _trigger(struct pl330_thread *thrd)
 
 	if (r->cfg)
 		ns = r->cfg->nonsecure ? 1 : 0;
-	else if (readl(regs + CS(thrd->id)) & CS_CNS)
+	else if (readl(regs + PL330_CS(thrd->id)) & CS_CNS)
 		ns = 1;
 	else
 		ns = 0;
@@ -1206,7 +1207,7 @@ static bool _trigger(struct pl330_thread *thrd)
 	_emit_GO(0, insn, &go);
 
 	/* Set to generate interrupts for SEV */
-	writel(readl(regs + INTEN) | (1 << thrd->ev), regs + INTEN);
+	writel(readl(regs + PL330_INTEN) | (1 << thrd->ev), regs + PL330_INTEN);
 
 	/* Only manager can execute GO */
 	_execute_DBGINSN(thrd, insn, true);
@@ -1581,7 +1582,7 @@ static int pl330_submit_req(void *ch_id, struct pl330_req *r)
 
 		ccr = _prepare_ccr(r->cfg);
 	} else {
-		ccr = readl(regs + CC(thrd->id));
+		ccr = readl(regs + PL330_CC(thrd->id));
 	}
 
 	/* If this req doesn't have valid xfer settings */
@@ -1658,7 +1659,7 @@ static void pl330_dotask(unsigned long data)
 
 			_stop(thrd);
 
-			if (readl(regs + FSC) & (1 << thrd->id))
+			if (readl(regs + PL330_FSC) & (1 << thrd->id))
 				err = PL330_ERR_FAIL;
 			else
 				err = PL330_ERR_ABORT;
@@ -1703,13 +1704,13 @@ static int pl330_update(const struct pl330_info *pi)
 
 	spin_lock_irqsave(&pl330->lock, flags);
 
-	val = readl(regs + FSM) & 0x1;
+	val = readl(regs + PL330_FSM) & 0x1;
 	if (val)
 		pl330->dmac_tbd.reset_mngr = true;
 	else
 		pl330->dmac_tbd.reset_mngr = false;
 
-	val = readl(regs + FSC) & ((1 << pi->pcfg.num_chan) - 1);
+	val = readl(regs + PL330_FSC) & ((1 << pi->pcfg.num_chan) - 1);
 	pl330->dmac_tbd.reset_chan |= val;
 	if (val) {
 		int i = 0;
@@ -1717,8 +1718,8 @@ static int pl330_update(const struct pl330_info *pi)
 			if (val & (1 << i)) {
 				dev_info(pi->dev,
 					"Reset Channel-%d\t CS-%x FTC-%x\n",
-						i, readl(regs + CS(i)),
-						readl(regs + FTC(i)));
+						i, readl(regs + PL330_CS(i)),
+						readl(regs + PL330_FTC(i)));
 				_stop(&pl330->channels[i]);
 			}
 			i++;
@@ -1726,7 +1727,7 @@ static int pl330_update(const struct pl330_info *pi)
 	}
 
 	/* Check which event happened i.e, thread notified */
-	val = readl(regs + ES);
+	val = readl(regs + PL330_ES);
 	if (pi->pcfg.num_events < 32
 			&& val & ~((1 << pi->pcfg.num_events) - 1)) {
 		pl330->dmac_tbd.reset_dmac = true;
@@ -1738,12 +1739,12 @@ static int pl330_update(const struct pl330_info *pi)
 	for (ev = 0; ev < pi->pcfg.num_events; ev++) {
 		if (val & (1 << ev)) { /* Event occurred */
 			struct pl330_thread *thrd;
-			u32 inten = readl(regs + INTEN);
+			u32 inten = readl(regs + PL330_INTEN);
 			int active;
 
 			/* Clear the event */
 			if (inten & (1 << ev))
-				writel(1 << ev, regs + INTCLR);
+				writel(1 << ev, regs + PL330_INTCLR);
 
 			ret = 1;
 
@@ -1950,41 +1951,41 @@ static void read_dmac_config(struct pl330_info *pi)
 	void __iomem *regs = pi->base;
 	u32 val;
 
-	val = readl(regs + CRD) >> CRD_DATA_WIDTH_SHIFT;
+	val = readl(regs + PL330_CRD) >> CRD_DATA_WIDTH_SHIFT;
 	val &= CRD_DATA_WIDTH_MASK;
 	pi->pcfg.data_bus_width = 8 * (1 << val);
 
-	val = readl(regs + CRD) >> CRD_DATA_BUFF_SHIFT;
+	val = readl(regs + PL330_CRD) >> CRD_DATA_BUFF_SHIFT;
 	val &= CRD_DATA_BUFF_MASK;
 	pi->pcfg.data_buf_dep = val + 1;
 
-	val = readl(regs + CR0) >> CR0_NUM_CHANS_SHIFT;
+	val = readl(regs + PL330_CR0) >> CR0_NUM_CHANS_SHIFT;
 	val &= CR0_NUM_CHANS_MASK;
 	val += 1;
 	pi->pcfg.num_chan = val;
 
-	val = readl(regs + CR0);
+	val = readl(regs + PL330_CR0);
 	if (val & CR0_PERIPH_REQ_SET) {
 		val = (val >> CR0_NUM_PERIPH_SHIFT) & CR0_NUM_PERIPH_MASK;
 		val += 1;
 		pi->pcfg.num_peri = val;
-		pi->pcfg.peri_ns = readl(regs + CR4);
+		pi->pcfg.peri_ns = readl(regs + PL330_CR4);
 	} else {
 		pi->pcfg.num_peri = 0;
 	}
 
-	val = readl(regs + CR0);
+	val = readl(regs + PL330_CR0);
 	if (val & CR0_BOOT_MAN_NS)
 		pi->pcfg.mode |= DMAC_MODE_NS;
 	else
 		pi->pcfg.mode &= ~DMAC_MODE_NS;
 
-	val = readl(regs + CR0) >> CR0_NUM_EVENTS_SHIFT;
+	val = readl(regs + PL330_CR0) >> CR0_NUM_EVENTS_SHIFT;
 	val &= CR0_NUM_EVENTS_MASK;
 	val += 1;
 	pi->pcfg.num_events = val;
 
-	pi->pcfg.irq_ns = readl(regs + CR3);
+	pi->pcfg.irq_ns = readl(regs + PL330_CR3);
 
 	pi->pcfg.periph_id = get_id(pi, PERIPH_ID);
 	pi->pcfg.pcell_id = get_id(pi, PCELL_ID);
-- 
1.7.7.2

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V5 2/5] watchdog: sp805_wdt depends on ARM
  2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
  2013-02-20 21:23 ` [PATCH V5 1/5] DMA: PL330: use prefix in reg names to build under x86 Alessandro Rubini
@ 2013-02-20 21:23 ` Alessandro Rubini
  2013-02-20 21:23 ` [PATCH V5 3/5] mmc: Use the new <linux/sizes.h> Alessandro Rubini
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: Giancarlo Asnaghi, Davide Ciminaghi, wim, tglx, mingo, hpa, x86

The SP805 driver is only used by the Spear machines, and uses
writel_relaxed, which is not available on all architectures.

The dependency from CONFIG_ARM avoids compilation problems under
randomconfig when CONFIG_ARM_AMBA is enabled for x86 builds.

Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
Signed-off-by: Davide Ciminaghi <ciminaghi@gnudd.com>
Acked-by: Wim Van Sebroeck <wim@iguana.be>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---

@Wim: I repost this after rebasing, on hpa's suggestion.

 drivers/watchdog/Kconfig |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 83ac1f7..e89fc31 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -109,7 +109,7 @@ config WM8350_WATCHDOG
 
 config ARM_SP805_WATCHDOG
 	tristate "ARM SP805 Watchdog"
-	depends on ARM_AMBA
+	depends on ARM && ARM_AMBA
 	select WATCHDOG_CORE
 	help
 	  ARM Primecell SP805 Watchdog timer. This will reboot your system when
-- 
1.7.7.2

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V5 3/5] mmc: Use the new <linux/sizes.h>
  2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
  2013-02-20 21:23 ` [PATCH V5 1/5] DMA: PL330: use prefix in reg names to build under x86 Alessandro Rubini
  2013-02-20 21:23 ` [PATCH V5 2/5] watchdog: sp805_wdt depends on ARM Alessandro Rubini
@ 2013-02-20 21:23 ` Alessandro Rubini
  2013-02-20 21:24 ` [PATCH V5 4/5] drivers/amba: add support for a PCI bridge Alessandro Rubini
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:23 UTC (permalink / raw)
  To: linux-kernel; +Cc: Giancarlo Asnaghi, Davide Ciminaghi, davidb

For portability, use <linux/sizes.h>.

Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
Acked-by: David Brown <davidb@codeaurora.org>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---

@David: I repost this after rebasing, on hpa's suggestion.

 drivers/mmc/host/mmci.c     |    2 +-
 drivers/mmc/host/msm_sdcc.c |    2 +-
 drivers/mmc/host/mvsdio.c   |    2 +-
 drivers/mmc/host/mxcmmc.c   |    2 +-
 drivers/mmc/host/pxamci.c   |    3 +--
 5 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 372e921..a47aa70 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -34,11 +34,11 @@
 #include <linux/amba/mmci.h>
 #include <linux/pm_runtime.h>
 #include <linux/types.h>
+#include <linux/sizes.h>
 #include <linux/pinctrl/consumer.h>
 
 #include <asm/div64.h>
 #include <asm/io.h>
-#include <asm/sizes.h>
 
 #include "mmci.h"
 
diff --git a/drivers/mmc/host/msm_sdcc.c b/drivers/mmc/host/msm_sdcc.c
index 7c0af0e..aa61b79 100644
--- a/drivers/mmc/host/msm_sdcc.c
+++ b/drivers/mmc/host/msm_sdcc.c
@@ -37,10 +37,10 @@
 #include <linux/memory.h>
 #include <linux/gfp.h>
 #include <linux/gpio.h>
+#include <linux/sizes.h>
 
 #include <asm/cacheflush.h>
 #include <asm/div64.h>
-#include <asm/sizes.h>
 
 #include <linux/platform_data/mmc-msm_sdcc.h>
 #include <mach/msm_iomap.h>
diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c
index 145cdaf..53a1224 100644
--- a/drivers/mmc/host/mvsdio.c
+++ b/drivers/mmc/host/mvsdio.c
@@ -23,11 +23,11 @@
 #include <linux/gpio.h>
 #include <linux/of_gpio.h>
 #include <linux/of_irq.h>
+#include <linux/sizes.h>
 #include <linux/mmc/host.h>
 #include <linux/mmc/slot-gpio.h>
 #include <linux/pinctrl/consumer.h>
 
-#include <asm/sizes.h>
 #include <asm/unaligned.h>
 #include <linux/platform_data/mmc-mvsdio.h>
 
diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
index a72936e..8ce7e73 100644
--- a/drivers/mmc/host/mxcmmc.c
+++ b/drivers/mmc/host/mxcmmc.c
@@ -34,10 +34,10 @@
 #include <linux/regulator/consumer.h>
 #include <linux/dmaengine.h>
 #include <linux/types.h>
+#include <linux/sizes.h>
 
 #include <asm/dma.h>
 #include <asm/irq.h>
-#include <asm/sizes.h>
 #include <linux/platform_data/mmc-mxcmmc.h>
 
 #include <linux/platform_data/dma-imx.h>
diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c
index 2b2f65a..6fa54a9 100644
--- a/drivers/mmc/host/pxamci.c
+++ b/drivers/mmc/host/pxamci.c
@@ -33,8 +33,7 @@
 #include <linux/of.h>
 #include <linux/of_gpio.h>
 #include <linux/of_device.h>
-
-#include <asm/sizes.h>
+#include <linux/sizes.h>
 
 #include <mach/hardware.h>
 #include <mach/dma.h>
-- 
1.7.7.2

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
  2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
                   ` (2 preceding siblings ...)
  2013-02-20 21:23 ` [PATCH V5 3/5] mmc: Use the new <linux/sizes.h> Alessandro Rubini
@ 2013-02-20 21:24 ` Alessandro Rubini
  2013-02-20 22:24   ` Russell King - ARM Linux
  2013-02-20 21:24 ` [PATCH V5 5/5] x86: add CONFIG_ARM_AMBA, selected by STA2X11 Alessandro Rubini
  2013-02-20 21:58 ` [PATCH V5 0/5] x86: a bridge from PCI to AMBA H. Peter Anvin
  5 siblings, 1 reply; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Giancarlo Asnaghi, Davide Ciminaghi, linux, alan, tglx, mingo,
	hpa, x86

This is a PCI driver that registers AMBA devices for the range of
supported devices.  It is currently used by STA2X11, which exports
AMBA peripherals under PCIe.  The original AMBA drivers work with no
changes or minimal ones.

Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Alan Cox <alan@linux.intel.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---

@Russell, Alan: I repost this after rebasing, on hpa's suggestion.

 drivers/Kconfig         |    2 +
 drivers/amba/Kconfig    |   10 +++++
 drivers/amba/Makefile   |    1 +
 drivers/amba/pci-amba.c |   93 +++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 106 insertions(+), 0 deletions(-)
 create mode 100644 drivers/amba/Kconfig
 create mode 100644 drivers/amba/pci-amba.c

diff --git a/drivers/Kconfig b/drivers/Kconfig
index 202fa6d..e17144d 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -162,4 +162,6 @@ source "drivers/irqchip/Kconfig"
 
 source "drivers/ipack/Kconfig"
 
+source "drivers/amba/Kconfig"
+
 endmenu
diff --git a/drivers/amba/Kconfig b/drivers/amba/Kconfig
new file mode 100644
index 0000000..b5b5aca
--- /dev/null
+++ b/drivers/amba/Kconfig
@@ -0,0 +1,10 @@
+
+config PCI_AMBA
+	tristate "PCI-to-AMBA bridge"
+	depends on ARM_AMBA && PCI
+	---help---
+	  This compiles a PCI driver that registers AMBA devices, so
+	  the respective AMBA driver can be used unchanged if you have
+	  a PCI to amba bridge. This is required for STA2X11 support.
+
+	  If uncertain, choose N.
diff --git a/drivers/amba/Makefile b/drivers/amba/Makefile
index 66e81c2..d30e947 100644
--- a/drivers/amba/Makefile
+++ b/drivers/amba/Makefile
@@ -1,2 +1,3 @@
 obj-$(CONFIG_ARM_AMBA)		+= bus.o
+obj-$(CONFIG_PCI_AMBA)		+= pci-amba.o
 obj-$(CONFIG_TEGRA_AHB)		+= tegra-ahb.o
diff --git a/drivers/amba/pci-amba.c b/drivers/amba/pci-amba.c
new file mode 100644
index 0000000..ff46575
--- /dev/null
+++ b/drivers/amba/pci-amba.c
@@ -0,0 +1,93 @@
+/*
+ * Support for AMBA devices (both APB and AHB) behind a PCI bridge
+ * Copyright 2012 ST Microelectronics (Alessandro Rubini)
+ * GNU GPL version 2.
+ */
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/amba/bus.h>
+#include <linux/pci.h>
+#include <linux/pci_ids.h>
+#include <linux/slab.h>
+#include <linux/irq.h>
+#include <linux/sizes.h>
+
+static int pci_amba_probe(struct pci_dev *pdev,
+				     const struct pci_device_id *id)
+{
+	struct amba_device *adev;
+	char *name;
+	int ret;
+
+	pci_enable_msi(pdev);
+	ret = pci_enable_device(pdev);
+	if (ret)
+		return ret;
+
+	/* Create a name: each of them must be different */
+	name = devm_kzalloc(&pdev->dev, strlen(dev_name(&pdev->dev)) + 6,
+		GFP_KERNEL);
+	sprintf(name, "amba-%s", dev_name(&pdev->dev));
+
+	/* Simply build an amba device and register it */
+	adev = amba_device_alloc(name,  pdev->resource[0].start, SZ_4K);
+	if (!adev)
+		return -ENOMEM;
+	adev->irq[0] = pdev->irq;
+
+	/* This bridge can host both APB and AHB devices, so set master */
+	pci_set_master(pdev);
+	if (pdev->vendor == PCI_VENDOR_ID_STMICRO) {
+		/* Under sta2x11, DMA is there but limited to 512M */
+		adev->dma_mask = SZ_512M - 1;
+		adev->dev.coherent_dma_mask = SZ_512M - 1;
+	}
+
+	adev->dev.platform_data = pdev->dev.platform_data;
+	pci_set_drvdata(pdev, adev);
+
+	return amba_device_add(adev, &pdev->resource[0]);
+};
+
+static void pci_amba_remove(struct pci_dev *pdev)
+{
+	struct amba_device *adev = pci_get_drvdata(pdev);
+	amba_device_unregister(adev);
+	pci_disable_msi(pdev);
+}
+
+static DEFINE_PCI_DEVICE_TABLE(pci_amba_table) = {
+	{PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_UART_HWFC)},
+	{PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_UART_NO_HWFC)},
+	{PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_SOC_DMA)},
+	{PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_I2C)},
+	{PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_SPI_HS)},
+	{PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_SDIO_EMMC)},
+	{PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_SDIO)},
+	{PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_AUDIO_ROUTER_DMA)},
+	{PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_AUDIO_ROUTER_MSPS)},
+	{0,}
+};
+
+static struct pci_driver pci_amba_driver = {
+	.name		= "pci-amba",
+	.id_table	= pci_amba_table,
+	.probe		= pci_amba_probe,
+	.remove		= pci_amba_remove,
+};
+
+static int __init pci_amba_init(void)
+{
+	return pci_register_driver(&pci_amba_driver);
+}
+
+static void __exit pci_amba_exit(void)
+{
+	pci_unregister_driver(&pci_amba_driver);
+}
+
+module_init(pci_amba_init);
+module_exit(pci_amba_exit);
+
+MODULE_LICENSE("GPL");
-- 
1.7.7.2

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V5 5/5] x86: add CONFIG_ARM_AMBA, selected by STA2X11
  2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
                   ` (3 preceding siblings ...)
  2013-02-20 21:24 ` [PATCH V5 4/5] drivers/amba: add support for a PCI bridge Alessandro Rubini
@ 2013-02-20 21:24 ` Alessandro Rubini
  2013-02-20 21:58 ` [PATCH V5 0/5] x86: a bridge from PCI to AMBA H. Peter Anvin
  5 siblings, 0 replies; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Giancarlo Asnaghi, Alan Cox, tglx, mingo, hpa, x86

The sta2x11 I/O Hub is a bridge from PCIe to AMBA. It reuses a number
of amba drivers and needs to activate core bus support.

Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
 arch/x86/Kconfig |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index b11f082..fc06c25 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -548,6 +548,7 @@ config STA2X11
 	select SWIOTLB
 	select MFD_STA2X11
 	select ARCH_REQUIRE_GPIOLIB
+	select ARM_AMBA
 	default n
 	---help---
 	  This adds support for boards based on the STA2X11 IO-Hub,
@@ -2271,6 +2272,9 @@ config TS5500
 
 endif # X86_32
 
+config ARM_AMBA
+        bool
+
 config AMD_NB
 	def_bool y
 	depends on CPU_SUP_AMD && PCI
-- 
1.7.7.2

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 0/5] x86: a bridge from PCI to AMBA
  2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
                   ` (4 preceding siblings ...)
  2013-02-20 21:24 ` [PATCH V5 5/5] x86: add CONFIG_ARM_AMBA, selected by STA2X11 Alessandro Rubini
@ 2013-02-20 21:58 ` H. Peter Anvin
  5 siblings, 0 replies; 13+ messages in thread
From: H. Peter Anvin @ 2013-02-20 21:58 UTC (permalink / raw)
  To: Alessandro Rubini
  Cc: linux-kernel, Giancarlo Asnaghi, Davide Ciminaghi, tglx, mingo,
	x86

On 02/20/2013 01:22 PM, Alessandro Rubini wrote:
> This is a repost of patches I sent quite some time ago and are
> available from the "tip" repository, as branch "x86/amba" based on
> v3.7.  That branch includes 7 patches but two of them are already
> upstream. Some of the other 5 had minor conflicts during rebase, but
> only in the initial "#include" area.
> 
> I repost as Peter Anvin suggested. The commits in the tip
> repository included both hpa's signed off (which I left in)
> and the reference to the previous lkml message, which I removed
> as it is not current by the time  this message exists.
> 
> Some acked-by we received on the mailing list are not in the patch set
> because they are missing from tip::x86/amba which is authoritative.
> 

Actually, no, they *should* be included.  The only reason they wouldn't
be in tip:x86/amba was that they weren't received by the time they got
put in the branch.

Could you add them back in?

	-hpa




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
  2013-02-20 21:24 ` [PATCH V5 4/5] drivers/amba: add support for a PCI bridge Alessandro Rubini
@ 2013-02-20 22:24   ` Russell King - ARM Linux
  2013-02-20 22:33     ` H. Peter Anvin
  0 siblings, 1 reply; 13+ messages in thread
From: Russell King - ARM Linux @ 2013-02-20 22:24 UTC (permalink / raw)
  To: Alessandro Rubini
  Cc: linux-kernel, Giancarlo Asnaghi, Davide Ciminaghi, alan, tglx,
	mingo, hpa, x86

On Wed, Feb 20, 2013 at 10:24:02PM +0100, Alessandro Rubini wrote:
> This is a PCI driver that registers AMBA devices for the range of
> supported devices.  It is currently used by STA2X11, which exports
> AMBA peripherals under PCIe.  The original AMBA drivers work with no
> changes or minimal ones.
> 
> Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
> Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
> Cc: Russell King <linux@arm.linux.org.uk>
> Cc: Alan Cox <alan@linux.intel.com>
> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
> ---
> 
> @Russell, Alan: I repost this after rebasing, on hpa's suggestion.

I'm happy to take it through my tree if everyone is now happy with this.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
  2013-02-20 22:24   ` Russell King - ARM Linux
@ 2013-02-20 22:33     ` H. Peter Anvin
  2013-02-20 22:45       ` Alessandro Rubini
  0 siblings, 1 reply; 13+ messages in thread
From: H. Peter Anvin @ 2013-02-20 22:33 UTC (permalink / raw)
  To: Russell King - ARM Linux
  Cc: Alessandro Rubini, linux-kernel, Giancarlo Asnaghi,
	Davide Ciminaghi, alan, tglx, mingo, x86

On 02/20/2013 02:24 PM, Russell King - ARM Linux wrote:
> On Wed, Feb 20, 2013 at 10:24:02PM +0100, Alessandro Rubini wrote:
>> This is a PCI driver that registers AMBA devices for the range of
>> supported devices.  It is currently used by STA2X11, which exports
>> AMBA peripherals under PCIe.  The original AMBA drivers work with no
>> changes or minimal ones.
>>
>> Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
>> Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
>> Cc: Russell King <linux@arm.linux.org.uk>
>> Cc: Alan Cox <alan@linux.intel.com>
>> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
>> ---
>>
>> @Russell, Alan: I repost this after rebasing, on hpa's suggestion.
> 
> I'm happy to take it through my tree if everyone is now happy with this.
> 

I am okay with that, although I would like to make sure we do a bunch of
x86 randconfigs on it before pushing it to Linus.

	-hpa


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
  2013-02-20 22:33     ` H. Peter Anvin
@ 2013-02-20 22:45       ` Alessandro Rubini
  2013-02-20 22:50         ` H. Peter Anvin
  0 siblings, 1 reply; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 22:45 UTC (permalink / raw)
  To: hpa
  Cc: linux, linux-kernel, giancarlo.asnaghi, ciminaghi, alan, tglx,
	mingo, x86

[meanwhile I posted V6 with the acked-by of linusw and others, that
were missing in V5]

rmk:
>> I'm happy to take it through my tree if everyone is now happy with this.

hpa: 
> I am okay with that, although I would like to make sure we do a bunch of
> x86 randconfigs on it before pushing it to Linus.

I did like this:
  - disable STA2X11 (and thus AMBA) and build
  - enable STA2X11, answer y to all new questions and build

So there's nothing left (you'll have two unrelated warnings, that I'm
working on and I'll post a fix tomorrow).  Sure, Peter, first time I
didn't do that test and missed some of the drivers.

Thanks
/alessandro

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
  2013-02-20 22:45       ` Alessandro Rubini
@ 2013-02-20 22:50         ` H. Peter Anvin
  2013-02-20 23:35           ` Russell King - ARM Linux
  0 siblings, 1 reply; 13+ messages in thread
From: H. Peter Anvin @ 2013-02-20 22:50 UTC (permalink / raw)
  To: Alessandro Rubini
  Cc: linux, linux-kernel, giancarlo.asnaghi, ciminaghi, alan, tglx,
	mingo, x86

On 02/20/2013 02:45 PM, Alessandro Rubini wrote:
> [meanwhile I posted V6 with the acked-by of linusw and others, that
> were missing in V5]
> 
> rmk:
>>> I'm happy to take it through my tree if everyone is now happy with this.
> 
> hpa: 
>> I am okay with that, although I would like to make sure we do a bunch of
>> x86 randconfigs on it before pushing it to Linus.
> 
> I did like this:
>   - disable STA2X11 (and thus AMBA) and build
>   - enable STA2X11, answer y to all new questions and build
> 
> So there's nothing left (you'll have two unrelated warnings, that I'm
> working on and I'll post a fix tomorrow).  Sure, Peter, first time I
> didn't do that test and missed some of the drivers.
> 

I was just concerned that rmk wouldn't necessarily do those tests as a
matter of process.

So Russell -- how do you want to handle this?  Should I take them (and
ask Ingo to put them through his test machinery) or do you want to (and
run x86 randconfigs as part of your testing)?

	-hpa



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
  2013-02-20 22:50         ` H. Peter Anvin
@ 2013-02-20 23:35           ` Russell King - ARM Linux
  2013-02-20 23:37             ` H. Peter Anvin
  0 siblings, 1 reply; 13+ messages in thread
From: Russell King - ARM Linux @ 2013-02-20 23:35 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Alessandro Rubini, linux-kernel, giancarlo.asnaghi, ciminaghi,
	alan, tglx, mingo, x86

On Wed, Feb 20, 2013 at 02:50:17PM -0800, H. Peter Anvin wrote:
> On 02/20/2013 02:45 PM, Alessandro Rubini wrote:
> > [meanwhile I posted V6 with the acked-by of linusw and others, that
> > were missing in V5]
> > 
> > rmk:
> >>> I'm happy to take it through my tree if everyone is now happy with this.
> > 
> > hpa: 
> >> I am okay with that, although I would like to make sure we do a bunch of
> >> x86 randconfigs on it before pushing it to Linus.
> > 
> > I did like this:
> >   - disable STA2X11 (and thus AMBA) and build
> >   - enable STA2X11, answer y to all new questions and build
> > 
> > So there's nothing left (you'll have two unrelated warnings, that I'm
> > working on and I'll post a fix tomorrow).  Sure, Peter, first time I
> > didn't do that test and missed some of the drivers.
> > 
> 
> I was just concerned that rmk wouldn't necessarily do those tests as a
> matter of process.
> 
> So Russell -- how do you want to handle this?  Should I take them (and
> ask Ingo to put them through his test machinery) or do you want to (and
> run x86 randconfigs as part of your testing)?

Well, I'm happy to take the non-x86 bits if that's what others want (for
the _next_ merge window, not this one.)  That _should_ result in x86 not
seeing this stuff until it gets the ARM_AMBA definition enabled, and
giving it a full cycle of testing.

However, if we want to keep the patch set together and route it via
another tree, I'm also fine with that too.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
  2013-02-20 23:35           ` Russell King - ARM Linux
@ 2013-02-20 23:37             ` H. Peter Anvin
  0 siblings, 0 replies; 13+ messages in thread
From: H. Peter Anvin @ 2013-02-20 23:37 UTC (permalink / raw)
  To: Russell King - ARM Linux
  Cc: Alessandro Rubini, linux-kernel, giancarlo.asnaghi, ciminaghi,
	alan, tglx, mingo, x86

On 02/20/2013 03:35 PM, Russell King - ARM Linux wrote:
> On Wed, Feb 20, 2013 at 02:50:17PM -0800, H. Peter Anvin wrote:
>> On 02/20/2013 02:45 PM, Alessandro Rubini wrote:
>>> [meanwhile I posted V6 with the acked-by of linusw and others, that
>>> were missing in V5]
>>>
>>> rmk:
>>>>> I'm happy to take it through my tree if everyone is now happy with this.
>>>
>>> hpa: 
>>>> I am okay with that, although I would like to make sure we do a bunch of
>>>> x86 randconfigs on it before pushing it to Linus.
>>>
>>> I did like this:
>>>   - disable STA2X11 (and thus AMBA) and build
>>>   - enable STA2X11, answer y to all new questions and build
>>>
>>> So there's nothing left (you'll have two unrelated warnings, that I'm
>>> working on and I'll post a fix tomorrow).  Sure, Peter, first time I
>>> didn't do that test and missed some of the drivers.
>>>
>>
>> I was just concerned that rmk wouldn't necessarily do those tests as a
>> matter of process.
>>
>> So Russell -- how do you want to handle this?  Should I take them (and
>> ask Ingo to put them through his test machinery) or do you want to (and
>> run x86 randconfigs as part of your testing)?
> 
> Well, I'm happy to take the non-x86 bits if that's what others want (for
> the _next_ merge window, not this one.)  That _should_ result in x86 not
> seeing this stuff until it gets the ARM_AMBA definition enabled, and
> giving it a full cycle of testing.
> 
> However, if we want to keep the patch set together and route it via
> another tree, I'm also fine with that too.
> 

Actually, between linux-next and Fengguang's zeroday testbot I suspect
we'll get all the coverage we need.  So yes, go ahead and take them.

Acked-by: H. Peter Anvin <hpa@linux.intel.com>

	-hpa


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2013-02-20 23:39 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 1/5] DMA: PL330: use prefix in reg names to build under x86 Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 2/5] watchdog: sp805_wdt depends on ARM Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 3/5] mmc: Use the new <linux/sizes.h> Alessandro Rubini
2013-02-20 21:24 ` [PATCH V5 4/5] drivers/amba: add support for a PCI bridge Alessandro Rubini
2013-02-20 22:24   ` Russell King - ARM Linux
2013-02-20 22:33     ` H. Peter Anvin
2013-02-20 22:45       ` Alessandro Rubini
2013-02-20 22:50         ` H. Peter Anvin
2013-02-20 23:35           ` Russell King - ARM Linux
2013-02-20 23:37             ` H. Peter Anvin
2013-02-20 21:24 ` [PATCH V5 5/5] x86: add CONFIG_ARM_AMBA, selected by STA2X11 Alessandro Rubini
2013-02-20 21:58 ` [PATCH V5 0/5] x86: a bridge from PCI to AMBA H. Peter Anvin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox