From: Stuart Yoder <stuart.yoder@nxp.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [RESEND PATCH 4/7 v5] pci/layerscape: add support for LUT
Date: Wed, 9 Mar 2016 10:03:25 -0600 [thread overview]
Message-ID: <1457539408-7518-5-git-send-email-stuart.yoder@nxp.com> (raw)
In-Reply-To: <1457539408-7518-1-git-send-email-stuart.yoder@nxp.com>
From: Stuart Yoder <stuart.yoder@nxp.com>
The per-PCI controller LUT (Look-Up-Table) is a 32-entry table
that maps PCI requester IDs (bus/dev/fun) to a stream ID.
This patch implements infrastructure to enable LUT initialization:
-define registers offsets
-add an index to 'struct ls_pcie' to track next available slot in LUT
-add function to allocate the next available entry index
-add function to program a LUT entry
Signed-off-by: Stuart Yoder <stuart.yoder@nxp.com>
---
-v5: check CONFIG_FSL_LSCH3 instead of SoC specific defines
.../include/asm/arch-fsl-layerscape/immap_lsch3.h | 4 +++
drivers/pci/pcie_layerscape.c | 30 ++++++++++++++++++++
2 files changed, 34 insertions(+)
diff --git a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
index 91f3ce8..d04e336 100644
--- a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
+++ b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
@@ -86,6 +86,10 @@
#define PCIE_LUT_BASE 0x80000
#define PCIE_LUT_LCTRL0 0x7F8
#define PCIE_LUT_DBG 0x7FC
+#define PCIE_LUT_UDR(n) (0x800 + (n) * 8)
+#define PCIE_LUT_LDR(n) (0x804 + (n) * 8)
+#define PCIE_LUT_ENABLE (1 << 31)
+#define PCIE_LUT_ENTRY_COUNT 32
/* Device Configuration */
#define DCFG_BASE 0x01e00000
diff --git a/drivers/pci/pcie_layerscape.c b/drivers/pci/pcie_layerscape.c
index bb29222..5cc6855 100644
--- a/drivers/pci/pcie_layerscape.c
+++ b/drivers/pci/pcie_layerscape.c
@@ -93,6 +93,7 @@ struct ls_pcie {
void __iomem *dbi;
void __iomem *va_cfg0;
void __iomem *va_cfg1;
+ int next_lut_index;
struct pci_controller hose;
};
@@ -482,6 +483,34 @@ static void ls_pcie_setup_ep(struct ls_pcie *pcie, struct ls_pcie_info *info)
}
}
+#ifdef CONFIG_FSL_LSCH3
+/*
+ * Return next available LUT index.
+ */
+static int ls_pcie_next_lut_index(struct ls_pcie *pcie)
+{
+ if (pcie->next_lut_index < PCIE_LUT_ENTRY_COUNT)
+ return pcie->next_lut_index++;
+ else
+ return -1; /* LUT is full */
+}
+
+/*
+ * Program a single LUT entry
+ */
+static void ls_pcie_lut_set_mapping(struct ls_pcie *pcie, int index, u32 devid,
+ u32 streamid)
+{
+ void __iomem *lut;
+
+ lut = pcie->dbi + PCIE_LUT_BASE;
+
+ /* leave mask as all zeroes, want to match all bits */
+ writel((devid << 16), lut + PCIE_LUT_UDR(index));
+ writel(streamid | PCIE_LUT_ENABLE, lut + PCIE_LUT_LDR(index));
+}
+#endif
+
int ls_pcie_init_ctrl(int busno, enum srds_prtcl dev, struct ls_pcie_info *info)
{
struct ls_pcie *pcie;
@@ -513,6 +542,7 @@ int ls_pcie_init_ctrl(int busno, enum srds_prtcl dev, struct ls_pcie_info *info)
pcie->va_cfg1 = map_physmem(info->cfg1_phys,
info->cfg1_size,
MAP_NOCACHE);
+ pcie->next_lut_index = 0;
/* outbound memory */
pci_set_region(&hose->regions[0],
--
1.7.9.5
next prev parent reply other threads:[~2016-03-09 16:03 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1457539408-7518-1-git-send-email-stuart.yoder@nxp.com>
2016-03-09 16:03 ` [U-Boot] [RESEND PATCH 1/7 v5] armv8: ls2080a: remove obsolete stream ID partitioning support Stuart Yoder
2016-03-09 16:03 ` [U-Boot] [RESEND PATCH 2/7 v5] armv8: ls2080a: update stream ID partitioning info Stuart Yoder
2016-03-09 16:03 ` Stuart Yoder [this message]
2016-03-09 18:01 ` [U-Boot] [RESEND PATCH 4/7 v5] pci/layerscape: add support for LUT york sun
2016-03-09 23:10 ` Stuart Yoder
2016-03-09 16:03 ` [U-Boot] [RESEND PATCH 5/7 v5] pci/layerscape: add stream ID allocator Stuart Yoder
2016-03-09 16:03 ` [U-Boot] [RESEND PATCH 6/7 v5] pci/layerscape: fdt: function to set msi-map entries Stuart Yoder
2016-03-09 16:03 ` [U-Boot] [RESEND PATCH 7/7 v5] pci/layerscape: set LUT and msi-map for discovered PCI devices Stuart Yoder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1457539408-7518-5-git-send-email-stuart.yoder@nxp.com \
--to=stuart.yoder@nxp.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.