mirror of
https://github.com/patjak/facetimehd.git
synced 2026-04-09 11:02:31 +02:00
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:
16
bcwc_drv.c
16
bcwc_drv.c
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
28
bcwc_hw.h
28
bcwc_hw.h
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user