bcwc_pcie: Allocate S2 mem and add read/write macros

Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
This commit is contained in:
Patrik Jakobsson
2014-08-09 14:17:50 +02:00
parent 922d51d807
commit 539bb171d6
3 changed files with 48 additions and 0 deletions

View File

@@ -31,6 +31,12 @@ static int bcwc_pci_reserve_mem(struct bcwc_private *dev_priv)
return ret;
}
ret = pci_request_region(dev_priv->pdev, BCWC_PCI_S2_MEM, "S2 MEM");
if (ret) {
dev_err(&dev_priv->pdev->dev, "Failed to request S2 MEM\n");
return ret;
}
ret = pci_request_region(dev_priv->pdev, BCWC_PCI_ISP_IO, "ISP IO");
if (ret) {
dev_err(&dev_priv->pdev->dev, "Failed to request ISP IO\n");
@@ -43,6 +49,12 @@ static int bcwc_pci_reserve_mem(struct bcwc_private *dev_priv)
dev_priv->s2_io = ioremap_nocache(start, len);
dev_priv->s2_io_len = len;
/* S2 MEM */
start = pci_resource_start(dev_priv->pdev, BCWC_PCI_S2_MEM);
len = pci_resource_len(dev_priv->pdev, BCWC_PCI_S2_MEM);
dev_priv->s2_mem = ioremap_nocache(start, len);
dev_priv->s2_mem_len = len;
/* ISP IO */
start = pci_resource_start(dev_priv->pdev, BCWC_PCI_ISP_IO);
len = pci_resource_len(dev_priv->pdev, BCWC_PCI_ISP_IO);
@@ -53,6 +65,10 @@ static int bcwc_pci_reserve_mem(struct bcwc_private *dev_priv)
"Allocated S2 regs (BAR %d). %u bytes at 0x%p",
BCWC_PCI_S2_IO, dev_priv->s2_io_len, dev_priv->s2_io);
dev_info(&dev_priv->pdev->dev,
"Allocated S2 mem (BAR %d). %u bytes at 0x%p",
BCWC_PCI_S2_MEM, dev_priv->s2_mem_len, dev_priv->s2_mem);
dev_info(&dev_priv->pdev->dev,
"Allocated ISP regs (BAR %d). %u bytes at 0x%p",
BCWC_PCI_ISP_IO, dev_priv->isp_io_len, dev_priv->isp_io);

View File

@@ -31,6 +31,10 @@ struct bcwc_private {
/* Mapped PCI resources */
void *s2_io;
u32 s2_io_len;
void *s2_mem;
u32 s2_mem_len;
void *isp_io;
u32 isp_io_len;

View File

@@ -17,6 +17,9 @@
#define BCWC_S2_REG_READ(offset) _BCWC_S2_REG_READ(dev_priv, (offset))
#define BCWC_S2_REG_WRITE(val, offset) _BCWC_S2_REG_WRITE(dev_priv, (val), (offset))
#define BCWC_S2_MEM_READ(offset) _BCWC_S2_MEM_READ(dev_priv, (offset))
#define BCWC_S2_MEM_WRITE(val, offset) _BCWC_S2_MEM_WRITE(dev_priv, (val), (offset))
#define BCWC_ISP_REG_READ(offset) _BCWC_ISP_REG_READ(dev_priv, (offset))
#define BCWC_ISP_REG_WRITE(val, offset) _BCWC_ISP_REG_WRITE(dev_priv, (val), (offset))
@@ -45,6 +48,31 @@ static inline void _BCWC_S2_REG_WRITE(struct bcwc_private *dev_priv, u32 val,
iowrite32(val, dev_priv->s2_io + offset);
}
static inline u32 _BCWC_S2_MEM_READ(struct bcwc_private *dev_priv, u32 offset)
{
if (offset >= dev_priv->s2_mem_len) {
dev_err(&dev_priv->pdev->dev,
"S2 MEM read out of range at %u\n", offset);
return 0;
}
// dev_info(&dev_priv->pdev->dev, "Link IO read at %u\n", offset);
return ioread32(dev_priv->s2_mem + offset);
}
static inline void _BCWC_S2_MEM_WRITE(struct bcwc_private *dev_priv, u32 val,
u32 offset)
{
if (offset >= dev_priv->s2_mem_len) {
dev_err(&dev_priv->pdev->dev,
"S2 MEM write out of range at %u\n", offset);
return;
}
// dev_info(&dev_priv->pdev->dev, "S2 IO write at %u\n", offset);
iowrite32(val, dev_priv->s2_mem + offset);
}
static inline u32 _BCWC_ISP_REG_READ(struct bcwc_private *dev_priv, u32 offset)
{
if (offset >= dev_priv->isp_io_len) {