mirror of https://gitee.com/openkylin/linux.git
media: atomisp: Replace direct access to MMIO with proper helpers
We have special helpers to access MMIO. Use them. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
89027fea0d
commit
71aecd5d63
|
@ -21,6 +21,7 @@
|
|||
#include <linux/firmware.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/kfifo.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
|
@ -669,11 +670,10 @@ bool atomisp_buffers_queued_pipe(struct atomisp_video_pipe *pipe)
|
|||
void dump_sp_dmem(struct atomisp_device *isp, unsigned int addr,
|
||||
unsigned int size)
|
||||
{
|
||||
u32 __iomem *io_virt_addr;
|
||||
unsigned int data = 0;
|
||||
unsigned int size32 = DIV_ROUND_UP(size, sizeof(u32));
|
||||
|
||||
dev_dbg(isp->dev, "atomisp_io_base:%p\n", atomisp_io_base);
|
||||
dev_dbg(isp->dev, "atomisp mmio base: %p\n", isp->base);
|
||||
dev_dbg(isp->dev, "%s, addr:0x%x, size: %d, size32: %d\n", __func__,
|
||||
addr, size, size32);
|
||||
if (size32 * 4 + addr > 0x4000) {
|
||||
|
@ -682,13 +682,12 @@ void dump_sp_dmem(struct atomisp_device *isp, unsigned int addr,
|
|||
return;
|
||||
}
|
||||
addr += SP_DMEM_BASE;
|
||||
io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
|
||||
addr &= 0x003FFFFF;
|
||||
do {
|
||||
data = *io_virt_addr;
|
||||
data = readl(isp->base + addr);
|
||||
dev_dbg(isp->dev, "%s, \t [0x%x]:0x%x\n", __func__, addr, data);
|
||||
io_virt_addr += sizeof(u32);
|
||||
size32 -= 1;
|
||||
} while (size32 > 0);
|
||||
addr += sizeof(u32);
|
||||
} while (--size32);
|
||||
}
|
||||
|
||||
static struct videobuf_buffer *atomisp_css_frame_to_vbuf(
|
||||
|
|
|
@ -29,8 +29,6 @@ struct atomisp_sub_device;
|
|||
struct video_device;
|
||||
enum atomisp_input_stream_id;
|
||||
|
||||
extern void __iomem *atomisp_io_base;
|
||||
|
||||
struct atomisp_metadata_buf {
|
||||
struct ia_css_metadata *metadata;
|
||||
void *md_vptr;
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "sh_css_hrt.h"
|
||||
#include "ia_css_isys.h"
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
|
||||
/* Assume max number of ACC stages */
|
||||
|
@ -67,92 +68,94 @@ struct bayer_ds_factor {
|
|||
|
||||
static void atomisp_css2_hw_store_8(hrt_address addr, uint8_t data)
|
||||
{
|
||||
s8 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
|
||||
struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&mmio_lock, flags);
|
||||
*io_virt_addr = data;
|
||||
writeb(data, isp->base + (addr & 0x003FFFFF));
|
||||
spin_unlock_irqrestore(&mmio_lock, flags);
|
||||
}
|
||||
|
||||
static void atomisp_css2_hw_store_16(hrt_address addr, uint16_t data)
|
||||
{
|
||||
s16 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
|
||||
struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&mmio_lock, flags);
|
||||
*io_virt_addr = data;
|
||||
writew(data, isp->base + (addr & 0x003FFFFF));
|
||||
spin_unlock_irqrestore(&mmio_lock, flags);
|
||||
}
|
||||
|
||||
void atomisp_css2_hw_store_32(hrt_address addr, uint32_t data)
|
||||
{
|
||||
s32 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
|
||||
struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&mmio_lock, flags);
|
||||
*io_virt_addr = data;
|
||||
writel(data, isp->base + (addr & 0x003FFFFF));
|
||||
spin_unlock_irqrestore(&mmio_lock, flags);
|
||||
}
|
||||
|
||||
static uint8_t atomisp_css2_hw_load_8(hrt_address addr)
|
||||
{
|
||||
s8 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
|
||||
struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
|
||||
unsigned long flags;
|
||||
u8 ret;
|
||||
|
||||
spin_lock_irqsave(&mmio_lock, flags);
|
||||
ret = *io_virt_addr;
|
||||
ret = readb(isp->base + (addr & 0x003FFFFF));
|
||||
spin_unlock_irqrestore(&mmio_lock, flags);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint16_t atomisp_css2_hw_load_16(hrt_address addr)
|
||||
{
|
||||
s16 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
|
||||
struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
|
||||
unsigned long flags;
|
||||
u16 ret;
|
||||
|
||||
spin_lock_irqsave(&mmio_lock, flags);
|
||||
ret = *io_virt_addr;
|
||||
ret = readw(isp->base + (addr & 0x003FFFFF));
|
||||
spin_unlock_irqrestore(&mmio_lock, flags);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint32_t atomisp_css2_hw_load_32(hrt_address addr)
|
||||
{
|
||||
s32 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
|
||||
struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
|
||||
unsigned long flags;
|
||||
u32 ret;
|
||||
|
||||
spin_lock_irqsave(&mmio_lock, flags);
|
||||
ret = *io_virt_addr;
|
||||
ret = readl(isp->base + (addr & 0x003FFFFF));
|
||||
spin_unlock_irqrestore(&mmio_lock, flags);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void atomisp_css2_hw_store(hrt_address addr,
|
||||
const void *from, uint32_t n)
|
||||
static void atomisp_css2_hw_store(hrt_address addr, const void *from, uint32_t n)
|
||||
{
|
||||
s8 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
|
||||
struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
|
||||
unsigned long flags;
|
||||
unsigned int i;
|
||||
|
||||
addr &= 0x003FFFFF;
|
||||
spin_lock_irqsave(&mmio_lock, flags);
|
||||
for (i = 0; i < n; i++, io_virt_addr++, from++)
|
||||
*io_virt_addr = *(s8 *)from;
|
||||
for (i = 0; i < n; i++, from++)
|
||||
writeb(*(s8 *)from, isp->base + addr + i);
|
||||
|
||||
spin_unlock_irqrestore(&mmio_lock, flags);
|
||||
}
|
||||
|
||||
static void atomisp_css2_hw_load(hrt_address addr, void *to, uint32_t n)
|
||||
{
|
||||
s8 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
|
||||
struct atomisp_device *isp = dev_get_drvdata(atomisp_dev);
|
||||
unsigned long flags;
|
||||
unsigned int i;
|
||||
|
||||
addr &= 0x003FFFFF;
|
||||
spin_lock_irqsave(&mmio_lock, flags);
|
||||
for (i = 0; i < n; i++, to++, io_virt_addr++)
|
||||
*(s8 *)to = *io_virt_addr;
|
||||
for (i = 0; i < n; i++, to++)
|
||||
*(s8 *)to = readb(isp->base + addr + i);
|
||||
spin_unlock_irqrestore(&mmio_lock, flags);
|
||||
}
|
||||
|
||||
|
|
|
@ -221,6 +221,7 @@ struct atomisp_device {
|
|||
struct media_device media_dev;
|
||||
struct atomisp_platform_data *pdata;
|
||||
void *mmu_l1_base;
|
||||
void __iomem *base;
|
||||
const struct firmware *firmware;
|
||||
|
||||
struct pm_qos_request pm_qos;
|
||||
|
|
|
@ -127,8 +127,6 @@ MODULE_PARM_DESC(pad_h, "extra data for ISP processing");
|
|||
|
||||
struct device *atomisp_dev;
|
||||
|
||||
void __iomem *atomisp_io_base;
|
||||
|
||||
static const struct atomisp_freq_scaling_rule dfs_rules_merr[] = {
|
||||
{
|
||||
.width = ISP_FREQ_RULE_ANY,
|
||||
|
@ -1533,7 +1531,6 @@ static int atomisp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *i
|
|||
const struct atomisp_platform_data *pdata;
|
||||
struct atomisp_device *isp;
|
||||
unsigned int start;
|
||||
void __iomem *base;
|
||||
int err, val;
|
||||
u32 irq;
|
||||
|
||||
|
@ -1562,13 +1559,6 @@ static int atomisp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *i
|
|||
goto ioremap_fail;
|
||||
}
|
||||
|
||||
base = pcim_iomap_table(pdev)[ATOM_ISP_PCI_BAR];
|
||||
dev_dbg(&pdev->dev, "base: %p\n", base);
|
||||
|
||||
atomisp_io_base = base;
|
||||
|
||||
dev_dbg(&pdev->dev, "atomisp_io_base: %p\n", atomisp_io_base);
|
||||
|
||||
isp = devm_kzalloc(&pdev->dev, sizeof(*isp), GFP_KERNEL);
|
||||
if (!isp) {
|
||||
err = -ENOMEM;
|
||||
|
@ -1576,9 +1566,12 @@ static int atomisp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *i
|
|||
}
|
||||
|
||||
isp->dev = &pdev->dev;
|
||||
isp->base = pcim_iomap_table(pdev)[ATOM_ISP_PCI_BAR];
|
||||
isp->sw_contex.power_state = ATOM_ISP_POWER_UP;
|
||||
isp->saved_regs.ispmmadr = start;
|
||||
|
||||
dev_dbg(&pdev->dev, "atomisp mmio base: %p\n", isp->base);
|
||||
|
||||
rt_mutex_init(&isp->mutex);
|
||||
mutex_init(&isp->streamoff_mutex);
|
||||
spin_lock_init(&isp->lock);
|
||||
|
@ -1586,6 +1579,8 @@ static int atomisp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *i
|
|||
/* This is not a true PCI device on SoC, so the delay is not needed. */
|
||||
pdev->d3_delay = 0;
|
||||
|
||||
pci_set_drvdata(pdev, isp);
|
||||
|
||||
switch (id->device & ATOMISP_PCI_DEVICE_SOC_MASK) {
|
||||
case ATOMISP_PCI_DEVICE_SOC_MRFLD:
|
||||
isp->media_dev.hw_revision =
|
||||
|
@ -1716,7 +1711,6 @@ static int atomisp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *i
|
|||
}
|
||||
|
||||
pci_set_master(pdev);
|
||||
pci_set_drvdata(pdev, isp);
|
||||
|
||||
err = pci_enable_msi(pdev);
|
||||
if (err) {
|
||||
|
|
Loading…
Reference in New Issue