mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
Merge commit '095e362a8eb1948abd4ac62bd9b569e512a994f8'
* commit '095e362a8eb1948abd4ac62bd9b569e512a994f8': arm64: dts: rockchip: rk3576-vehicle-evb: close usb otg 5v default ARM: configs: rockchip_amp.config: Add rpmsg config ARM: dts: rockchip: rk3506-amp: Use mailbox2 as rpmsg-tx rpmsg: rockchip: Don't send notification until last_tx_done() is ok rpmsg: rockchip: use kmalloc to save tx_msg rpmsg: rockchip: mailbox tx/rx use different callback video: rockchip: mpp: rk3562 use cru reset media: rockchip: isp: add fpn function media: rockchip: isp: fix lsc switch for isp30 Change-Id: Icdf482cb6bddd293b3d6da99c26013ba4c036559
This commit is contained in:
@@ -32,7 +32,7 @@
|
||||
/* UART4 */
|
||||
GIC_AMP_IRQ_CFG_ROUTE(70, 0xd0, CPU_GET_AFFINITY(0, 2))
|
||||
/* MAILBOX */
|
||||
GIC_AMP_IRQ_CFG_ROUTE(174, 0xd0, CPU_GET_AFFINITY(0, 2))>;
|
||||
GIC_AMP_IRQ_CFG_ROUTE(176, 0xd0, CPU_GET_AFFINITY(0, 2))>;
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
@@ -40,10 +40,11 @@
|
||||
rpmsg: rpmsg@3c00000 {
|
||||
compatible = "rockchip,rpmsg";
|
||||
mbox-names = "rpmsg-rx", "rpmsg-tx";
|
||||
mboxes = <&mailbox0 0 &mailbox0 3>;
|
||||
mboxes = <&mailbox0 0 &mailbox2 0>;
|
||||
rockchip,vdev-nums = <1>;
|
||||
rockchip,link-id = <0x03>;
|
||||
reg = <0x3c00000 0x100000>;
|
||||
/* CPU2: link-id 0x02; */
|
||||
rockchip,link-id = <0x02>;
|
||||
reg = <0x3c00000 0x20000>;
|
||||
memory-region = <&rpmsg_dma_reserved>;
|
||||
|
||||
status = "okay";
|
||||
@@ -59,6 +60,11 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&mailbox2 {
|
||||
rockchip,txpoll-period-ms = <1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&reserved_memory {
|
||||
/* remote amp core address */
|
||||
amp_shmem_reserved: amp-shmem@3b00000 {
|
||||
|
||||
@@ -1 +1,31 @@
|
||||
CONFIG_MAILBOX=y
|
||||
CONFIG_ROCKCHIP_AMP=y
|
||||
CONFIG_RPMSG_VIRTIO=y
|
||||
# CONFIG_ALTERA_MBOX is not set
|
||||
# CONFIG_ARM_MHU is not set
|
||||
# CONFIG_ARM_MHU_V2 is not set
|
||||
# CONFIG_ARM_SCPI_PROTOCOL is not set
|
||||
CONFIG_BLK_MQ_VIRTIO=y
|
||||
# CONFIG_BT_VIRTIO is not set
|
||||
# CONFIG_CRYPTO_DEV_VIRTIO is not set
|
||||
# CONFIG_GPIO_VIRTIO is not set
|
||||
# CONFIG_HW_RANDOM_VIRTIO is not set
|
||||
CONFIG_MAILBOX_POLL_PERIOD_US=y
|
||||
# CONFIG_MAILBOX_TEST is not set
|
||||
# CONFIG_PL320_MBOX is not set
|
||||
# CONFIG_PLATFORM_MHU is not set
|
||||
CONFIG_ROCKCHIP_MBOX=y
|
||||
# CONFIG_ROCKCHIP_MBOX_DEMO is not set
|
||||
CONFIG_RPMSG=y
|
||||
# CONFIG_RPMSG_CHAR is not set
|
||||
# CONFIG_RPMSG_CTRL is not set
|
||||
CONFIG_RPMSG_NS=y
|
||||
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
|
||||
CONFIG_RPMSG_ROCKCHIP_MBOX=y
|
||||
# CONFIG_RPMSG_ROCKCHIP_TEST is not set
|
||||
# CONFIG_RPMSG_TTY is not set
|
||||
# CONFIG_SND_SOC_FSL_RPMSG is not set
|
||||
# CONFIG_SND_VIRTIO is not set
|
||||
CONFIG_VIRTIO=y
|
||||
CONFIG_VIRTIO_ANCHOR=y
|
||||
# CONFIG_VIRTIO_BLK is not set
|
||||
|
||||
@@ -62,14 +62,14 @@
|
||||
};
|
||||
};
|
||||
|
||||
usb_otg0_vcc5v_buck: usb_otg0_vcc5v-buck {
|
||||
usb_otg_vcc5v_buck: usb_otg_vcc5v-buck {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "usb_otg0_vcc5v_buck";
|
||||
regulator-name = "usb_otg_vcc5v_buck";
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
enable-active-high;
|
||||
//enable-active-high;
|
||||
gpio = <&i2c0_nca9539_gpio 0 GPIO_ACTIVE_HIGH>;
|
||||
vin-supply = <&vcc5v0_buck>;
|
||||
regulator-state-mem {
|
||||
@@ -524,3 +524,30 @@
|
||||
&ufs {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&u2phy0 {
|
||||
rockchip,sel-pipe-phystatus;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&u2phy0_otg {
|
||||
/delete-property/rockchip,sel-pipe-phystatus;
|
||||
//vbus-supply = <&usb_otg_vcc5v_buck>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&u2phy1_otg {
|
||||
phy-supply = <&usb_host_vcc5v_buck>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbdp_phy {
|
||||
maximum-speed = "high-speed";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_drd1_dwc3 {
|
||||
maximum-speed = "high-speed";
|
||||
snps,dis_u2_susphy_quirk;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -290,6 +290,7 @@ struct rkisp_device {
|
||||
spinlock_t aiisp_lock;
|
||||
struct rkisp_cmsk_cfg cmsk_cfg;
|
||||
struct rkisp_aiisp_cfg aiisp_cfg;
|
||||
struct rkisp_fpn_cfg fpn_cfg;
|
||||
|
||||
bool is_cmsk_upd;
|
||||
bool is_hw_link;
|
||||
|
||||
@@ -1067,7 +1067,7 @@ static void isp_config_clk(struct rkisp_hw_dev *dev, int on)
|
||||
val = 0;
|
||||
|
||||
if ((dev->isp_ver == ISP_V20 || dev->isp_ver == ISP_V30) && on)
|
||||
val |= CLK_CTRL_ISP_3A;
|
||||
val |= CLK_CTRL_ISP_3A | CLK_CTRL_ISP_RAW;
|
||||
if (dev->isp_ver == ISP_V32)
|
||||
rv1106_sdmmc_get_lock();
|
||||
writel(val, dev->base_addr + CTRL_VI_ISP_CLK_CTRL);
|
||||
|
||||
@@ -275,6 +275,12 @@ static void rkisp_params_vb2_stop_streaming(struct vb2_queue *vq)
|
||||
params_vdev->rdbk_times = 0;
|
||||
if (!(dev->isp_state & ISP_START))
|
||||
rkisp_params_stream_stop(params_vdev);
|
||||
dev->fpn_cfg.en = 0;
|
||||
if (dev->fpn_cfg.buf) {
|
||||
vfree(dev->fpn_cfg.buf);
|
||||
dev->fpn_cfg.buf = NULL;
|
||||
dev->fpn_cfg.buf_size = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
@@ -634,6 +634,7 @@ static void
|
||||
isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
|
||||
{
|
||||
struct isp3x_isp_params_cfg *params_rec = params_vdev->isp3x_params + id;
|
||||
struct rkisp_isp_params_val_v3x *priv_val = params_vdev->priv_val;
|
||||
u32 val = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id);
|
||||
|
||||
if (en == !!(val & ISP_LSC_EN))
|
||||
@@ -641,9 +642,12 @@ isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
|
||||
|
||||
if (en) {
|
||||
isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN, id);
|
||||
if (params_vdev->dev->hw_dev->is_single)
|
||||
isp_lsc_matrix_cfg_sram(params_vdev,
|
||||
¶ms_rec->others.lsc_cfg, false, id);
|
||||
if (params_vdev->dev->hw_dev->is_single) {
|
||||
if (!in_interrupt())
|
||||
isp_lsc_matrix_cfg_sram(params_vdev, ¶ms_rec->others.lsc_cfg, false, id);
|
||||
else if (id == ISP3_LEFT)
|
||||
tasklet_schedule(&priv_val->lsc_tasklet);
|
||||
}
|
||||
} else {
|
||||
isp3_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN, id);
|
||||
isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(8), id);
|
||||
|
||||
@@ -241,6 +241,8 @@ static void isp30_show(struct rkisp_device *dev, struct seq_file *p)
|
||||
};
|
||||
u32 val, tmp;
|
||||
|
||||
val = rkisp_read(dev, CSI2RX_FPN_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "FPN", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP3X_CMSK_CTRL0, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "CMSK", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP3X_DPCC0_MODE, false);
|
||||
|
||||
@@ -561,7 +561,8 @@
|
||||
#define CSI2RX_RAWFBC_EN_SHD (CSI2RX_BASE + 0x000c8)
|
||||
#define CSI2RX_FPN_CTRL (CSI2RX_BASE + 0x000d0)
|
||||
#define CSI2RX_FPN_TABLE_CTRL (CSI2RX_BASE + 0x000d4)
|
||||
#define CSI2RX_FPN_TABLE_DATA (CSI2RX_BASE + 0x000d8)
|
||||
#define CSI2RX_FPN_TABLE_DATA0 (CSI2RX_BASE + 0x000d8)
|
||||
#define CSI2RX_FPN_TABLE_DATA1 (CSI2RX_BASE + 0x000dc)
|
||||
#define CSI2RX_Y_STAT_CTRL (CSI2RX_BASE + 0x000f0)
|
||||
#define CSI2RX_Y_STAT_RO (CSI2RX_BASE + 0x000f4)
|
||||
#define CSI2RX_VERSION (CSI2RX_BASE + 0x000fc)
|
||||
@@ -2432,6 +2433,12 @@
|
||||
#define SW_CSI_ESP_IDCD_OBPIX(a) ((a) & 0x7F)
|
||||
#define SW_CSI_ESP_IDCD_EFPIX(a) (((a) & 0x7F) << 16)
|
||||
|
||||
#define SW_FPN_EN BIT(0)
|
||||
#define SW_FPN_ROW_EN BIT(1)
|
||||
#define SW_FPN_BITS(a) (((a) & 0x3) << 2)
|
||||
|
||||
#define SW_FPN_CFG BIT(0)
|
||||
|
||||
#define SW_Y_STAT_INT_MODE_MASK GENMASK(3, 2)
|
||||
#define SW_Y_STAT_RD_FRM_ID_MASK GENMASK(5, 4)
|
||||
#define SW_Y_STAT_RD_TILE_ID_MASK GENMASK(7, 6)
|
||||
|
||||
@@ -87,6 +87,7 @@
|
||||
|
||||
static void rkisp_config_cmsk(struct rkisp_device *dev);
|
||||
static void rkisp_config_aiisp(struct rkisp_device *dev);
|
||||
static void rkisp_config_fpn(struct rkisp_device *dev);
|
||||
|
||||
static inline struct rkisp_device *sd_to_isp_dev(struct v4l2_subdev *sd)
|
||||
{
|
||||
@@ -1825,6 +1826,8 @@ static int rkisp_config_isp(struct rkisp_device *dev)
|
||||
dev->is_aiisp_upd = dev->is_aiisp_en;
|
||||
rkisp_config_cmsk(dev);
|
||||
rkisp_config_aiisp(dev);
|
||||
if (dev->hw_dev->is_single)
|
||||
rkisp_config_fpn(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3768,6 +3771,84 @@ static int rkisp_get_offline_raw_buf_cnt(struct rkisp_device *dev, int *cnt)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rkisp_config_fpn(struct rkisp_device *dev)
|
||||
{
|
||||
struct rkisp_fpn_cfg *cfg = &dev->fpn_cfg;
|
||||
u32 i, val, *data;
|
||||
|
||||
if (!cfg->en) {
|
||||
rkisp_unite_write(dev, CSI2RX_FPN_CTRL, 0, true);
|
||||
return;
|
||||
}
|
||||
val = SW_FPN_EN | SW_FPN_BITS(cfg->data_shift);
|
||||
if (cfg->row_en)
|
||||
val |= SW_FPN_ROW_EN;
|
||||
rkisp_unite_write(dev, CSI2RX_FPN_CTRL, val, true);
|
||||
rkisp_unite_write(dev, CSI2RX_FPN_TABLE_CTRL, SW_FPN_CFG, true);
|
||||
data = cfg->buf;
|
||||
/* 32bit: 8 fpn, first data line for DATA0, second line for DATA1 */
|
||||
for (i = 0; i < cfg->buf_size / 8; i++) {
|
||||
val = *(data + i);
|
||||
rkisp_unite_write(dev, CSI2RX_FPN_TABLE_DATA0, val, true);
|
||||
val = *(data + cfg->buf_size / 8 + i);
|
||||
rkisp_unite_write(dev, CSI2RX_FPN_TABLE_DATA1, val, true);
|
||||
}
|
||||
rkisp_unite_write(dev, CSI2RX_FPN_TABLE_CTRL, 0, true);
|
||||
}
|
||||
|
||||
static int rkisp_set_fpn(struct rkisp_device *dev, struct rkisp_fpn_cfg *cfg)
|
||||
{
|
||||
u32 w = dev->isp_sdev.out_crop.width;
|
||||
u32 h = dev->isp_sdev.out_crop.height;
|
||||
int ret = 0;
|
||||
|
||||
if (!cfg->en && dev->fpn_cfg.en) {
|
||||
dev->fpn_cfg.en = 0;
|
||||
if (dev->fpn_cfg.buf) {
|
||||
vfree(dev->fpn_cfg.buf);
|
||||
dev->fpn_cfg.buf = NULL;
|
||||
dev->fpn_cfg.buf_size = 0;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
if ((cfg->row_en && cfg->buf_size < h) ||
|
||||
(!cfg->row_en && cfg->buf_size < w)) {
|
||||
dev_err(dev->dev, "fpn buf size %d row_en:%d error for %dx%d\n",
|
||||
cfg->buf_size, cfg->row_en, w, h);
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (dev->fpn_cfg.buf && dev->fpn_cfg.buf_size < cfg->buf_size) {
|
||||
vfree(dev->fpn_cfg.buf);
|
||||
dev->fpn_cfg.buf = NULL;
|
||||
dev->fpn_cfg.buf_size = 0;
|
||||
}
|
||||
|
||||
if (!dev->fpn_cfg.buf) {
|
||||
dev->fpn_cfg.buf = vmalloc(cfg->buf_size);
|
||||
if (!dev->fpn_cfg.buf) {
|
||||
ret = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
if (copy_from_user(dev->fpn_cfg.buf, cfg->buf, cfg->buf_size)) {
|
||||
dev_err(dev->dev, "copy fpn data err\n");
|
||||
vfree(dev->fpn_cfg.buf);
|
||||
dev->fpn_cfg.buf = NULL;
|
||||
dev->fpn_cfg.buf_size = 0;
|
||||
ret = -EFAULT;
|
||||
goto err;
|
||||
}
|
||||
dev->fpn_cfg.en = cfg->en;
|
||||
dev->fpn_cfg.row_en = cfg->row_en;
|
||||
dev->fpn_cfg.data_shift = cfg->data_shift;
|
||||
dev->fpn_cfg.buf_size = cfg->buf_size;
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static long rkisp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct rkisp_device *isp_dev = sd_to_isp_dev(sd);
|
||||
@@ -3927,6 +4008,9 @@ static long rkisp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
||||
case RKISP_CMD_GET_OFFLINE_RAW_BUFCNT:
|
||||
ret = rkisp_get_offline_raw_buf_cnt(isp_dev, arg);
|
||||
break;
|
||||
case RKISP_CMD_SET_FPN:
|
||||
ret = rkisp_set_fpn(isp_dev, arg);
|
||||
break;
|
||||
default:
|
||||
ret = -ENOIOCTLCMD;
|
||||
}
|
||||
@@ -4024,6 +4108,10 @@ static long rkisp_compat_ioctl32(struct v4l2_subdev *sd,
|
||||
size = sizeof(int);
|
||||
cp_t_us = true;
|
||||
break;
|
||||
case RKISP_CMD_SET_FPN:
|
||||
size = sizeof(struct rkisp_fpn_cfg);
|
||||
cp_f_us = true;
|
||||
break;
|
||||
default:
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
@@ -41,9 +41,10 @@ struct rk_rpmsg_dev {
|
||||
struct platform_device *pdev;
|
||||
int vdev_nums;
|
||||
unsigned int link_id;
|
||||
int first_notify;
|
||||
bool need_notify;
|
||||
u32 flags;
|
||||
struct mbox_client mbox_cl;
|
||||
struct mbox_client mbox_rx_cl;
|
||||
struct mbox_client mbox_tx_cl;
|
||||
struct mbox_chan *mbox_rx_chan;
|
||||
struct mbox_chan *mbox_tx_chan;
|
||||
struct rk_virtio_dev *rpvdev[RPMSG_MAX_INSTANCE_NUM];
|
||||
@@ -55,20 +56,46 @@ struct rk_rpmsg_vq_info {
|
||||
struct rk_rpmsg_dev *rpdev;
|
||||
};
|
||||
|
||||
static void rk_rpmsg_tx_callback(struct mbox_client *client, void *message)
|
||||
{
|
||||
struct rk_virtio_dev *rpvdev;
|
||||
struct rk_rpmsg_dev *rpdev = container_of(client, struct rk_rpmsg_dev, mbox_tx_cl);
|
||||
struct platform_device *pdev = rpdev->pdev;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct rockchip_mbox_msg *rx_msg = message;
|
||||
|
||||
dev_dbg(dev, "rpmsg master tx cb: receive cmd=0x%x data=0x%x\n",
|
||||
rx_msg->cmd, rx_msg->data);
|
||||
|
||||
if (rx_msg->data != RPMSG_MBOX_MAGIC)
|
||||
dev_err(dev, "rpmsg master tx cb: mailbox data error 0x%8x!\n",
|
||||
rx_msg->data);
|
||||
|
||||
/* TODO: only support one remote core now */
|
||||
rpvdev = rpdev->rpvdev[0];
|
||||
|
||||
/*
|
||||
* Recv TX CONSUME message
|
||||
* Enabled RL_ALLOW_CONSUMED_BUFFERS_NOTIFICATION in rpmsg-lite
|
||||
*/
|
||||
vring_interrupt(0, rpvdev->vq[1]);
|
||||
}
|
||||
|
||||
static void rk_rpmsg_rx_callback(struct mbox_client *client, void *message)
|
||||
{
|
||||
u32 link_id;
|
||||
struct rk_virtio_dev *rpvdev;
|
||||
struct rk_rpmsg_dev *rpdev = container_of(client, struct rk_rpmsg_dev, mbox_cl);
|
||||
struct rk_rpmsg_dev *rpdev = container_of(client, struct rk_rpmsg_dev, mbox_rx_cl);
|
||||
struct platform_device *pdev = rpdev->pdev;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct rockchip_mbox_msg *rx_msg;
|
||||
|
||||
rx_msg = message;
|
||||
dev_dbg(dev, "rpmsg master: receive cmd=0x%x data=0x%x\n",
|
||||
dev_dbg(dev, "rpmsg master rx cb: receive cmd=0x%x data=0x%x\n",
|
||||
rx_msg->cmd, rx_msg->data);
|
||||
if (rx_msg->data != RPMSG_MBOX_MAGIC)
|
||||
dev_err(dev, "rpmsg master: mailbox data error!\n");
|
||||
dev_err(dev, "rpmsg master rx cb: mailbox data error 0x%8x!\n",
|
||||
rx_msg->data);
|
||||
link_id = rx_msg->cmd & 0xFFU;
|
||||
/* TODO: only support one remote core now */
|
||||
rpvdev = rpdev->rpvdev[0];
|
||||
@@ -77,6 +104,12 @@ static void rk_rpmsg_rx_callback(struct mbox_client *client, void *message)
|
||||
vring_interrupt(0, rpvdev->vq[0]);
|
||||
}
|
||||
|
||||
static void rk_rpmsg_xfer_done(struct mbox_client *cl, void *mssg, int r)
|
||||
{
|
||||
if (!r)
|
||||
kfree(mssg);
|
||||
}
|
||||
|
||||
static bool rk_rpmsg_notify(struct virtqueue *vq)
|
||||
{
|
||||
struct rk_rpmsg_vq_info *rpvq = vq->priv;
|
||||
@@ -85,25 +118,44 @@ static bool rk_rpmsg_notify(struct virtqueue *vq)
|
||||
struct device *dev = &pdev->dev;
|
||||
u32 link_id;
|
||||
int ret;
|
||||
struct rockchip_mbox_msg tx_msg;
|
||||
struct rockchip_mbox_msg *tx_msg;
|
||||
|
||||
memset(&tx_msg, 0, sizeof(tx_msg));
|
||||
dev_dbg(dev, "queue_id-0x%x virt_vring_addr 0x%p\n",
|
||||
rpvq->queue_id, rpvq->vring_addr);
|
||||
|
||||
link_id = rpdev->link_id;
|
||||
tx_msg.cmd = link_id & 0xFFU;
|
||||
tx_msg.data = RPMSG_MBOX_MAGIC;
|
||||
|
||||
if ((rpdev->first_notify == 0) && (rpvq->queue_id % 2 == 0)) {
|
||||
/* first_notify is used in the master init handshake phase. */
|
||||
dev_dbg(dev, "rpmsg first_notify\n");
|
||||
rpdev->first_notify++;
|
||||
if ((!rpdev->need_notify) && (rpvq->queue_id % 2 == 0)) {
|
||||
/* first notify is used in the master init handshake phase. */
|
||||
dev_dbg(dev, "rpmsg handshake notify\n");
|
||||
} else if (rpvq->queue_id % 2 == 0) {
|
||||
/* tx done is not supported, so ignored */
|
||||
return true;
|
||||
}
|
||||
ret = mbox_send_message(rpdev->mbox_tx_chan, &tx_msg);
|
||||
|
||||
if (!rpdev->mbox_tx_chan->mbox->ops->last_tx_done(rpdev->mbox_tx_chan)) {
|
||||
/*
|
||||
* Mailbox BUSY means remote side has not processed previous
|
||||
* notification. The remote side will process all availd
|
||||
* messages after meeting the last notification.
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
|
||||
if (rpdev->need_notify)
|
||||
mbox_client_txdone(rpdev->mbox_tx_chan, 0);
|
||||
else
|
||||
rpdev->need_notify = true;
|
||||
|
||||
tx_msg = kzalloc(sizeof(*tx_msg), GFP_KERNEL);
|
||||
if (!tx_msg) {
|
||||
dev_err(dev, "Can not get memory for tx_msg\n");
|
||||
return false;
|
||||
}
|
||||
tx_msg->cmd = link_id & 0xFFU;
|
||||
tx_msg->data = RPMSG_MBOX_MAGIC;
|
||||
|
||||
ret = mbox_send_message(rpdev->mbox_tx_chan, tx_msg);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "mbox send failed!\n");
|
||||
return false;
|
||||
@@ -300,12 +352,13 @@ static int rockchip_rpmsg_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
dev_info(dev, "rockchip rpmsg platform probe.\n");
|
||||
rpdev->pdev = pdev;
|
||||
rpdev->first_notify = 0;
|
||||
|
||||
cl = &rpdev->mbox_cl;
|
||||
rpdev->pdev = pdev;
|
||||
rpdev->need_notify = false;
|
||||
cl = &rpdev->mbox_rx_cl;
|
||||
cl->dev = dev;
|
||||
cl->rx_callback = rk_rpmsg_rx_callback;
|
||||
cl->tx_done = rk_rpmsg_xfer_done;
|
||||
|
||||
rpdev->mbox_rx_chan = mbox_request_channel_byname(cl, "rpmsg-rx");
|
||||
if (IS_ERR(rpdev->mbox_rx_chan)) {
|
||||
@@ -313,6 +366,13 @@ static int rockchip_rpmsg_probe(struct platform_device *pdev)
|
||||
dev_err(dev, "failed to request mbox rx chan, ret %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
cl = &rpdev->mbox_tx_cl;
|
||||
cl->dev = dev;
|
||||
cl->rx_callback = rk_rpmsg_tx_callback;
|
||||
cl->tx_done = rk_rpmsg_xfer_done;
|
||||
cl->knows_txdone = true;
|
||||
|
||||
rpdev->mbox_tx_chan = mbox_request_channel_byname(cl, "rpmsg-tx");
|
||||
if (IS_ERR(rpdev->mbox_tx_chan)) {
|
||||
ret = PTR_ERR(rpdev->mbox_tx_chan);
|
||||
|
||||
@@ -1346,7 +1346,7 @@ static int rkvdec2_vdpu382_reset(struct mpp_dev *mpp)
|
||||
int ret = 0;
|
||||
|
||||
/*
|
||||
* only for rk3528 and rk3562
|
||||
* only for rk3528
|
||||
* use mmu reset as soft reset
|
||||
* rkvdec will reset together when rkvdec_mmu force reset
|
||||
*/
|
||||
@@ -1550,7 +1550,7 @@ static const struct mpp_dev_var rkvdec_rk3568_data = {
|
||||
.dev_ops = &rkvdec_rk3568_dev_ops,
|
||||
};
|
||||
|
||||
static const struct mpp_dev_var rkvdec_vdpu382_data = {
|
||||
static const struct mpp_dev_var rkvdec_rk3528_data = {
|
||||
.device_type = MPP_DEVICE_RKVDEC,
|
||||
.hw_info = &rkvdec_vdpu382_hw_info,
|
||||
.trans_info = rkvdec_v2_trans,
|
||||
@@ -1558,6 +1558,14 @@ static const struct mpp_dev_var rkvdec_vdpu382_data = {
|
||||
.dev_ops = &rkvdec_v2_dev_ops,
|
||||
};
|
||||
|
||||
static const struct mpp_dev_var rkvdec_rk3562_data = {
|
||||
.device_type = MPP_DEVICE_RKVDEC,
|
||||
.hw_info = &rkvdec_vdpu382_hw_info,
|
||||
.trans_info = rkvdec_v2_trans,
|
||||
.hw_ops = &rkvdec_v2_hw_ops,
|
||||
.dev_ops = &rkvdec_v2_dev_ops,
|
||||
};
|
||||
|
||||
static const struct mpp_dev_var rkvdec_rk3588_data = {
|
||||
.device_type = MPP_DEVICE_RKVDEC,
|
||||
.hw_info = &rkvdec_v2_hw_info,
|
||||
@@ -1594,13 +1602,13 @@ static const struct of_device_id mpp_rkvdec2_dt_match[] = {
|
||||
#ifdef CONFIG_CPU_RK3528
|
||||
{
|
||||
.compatible = "rockchip,rkv-decoder-rk3528",
|
||||
.data = &rkvdec_vdpu382_data,
|
||||
.data = &rkvdec_rk3528_data,
|
||||
},
|
||||
#endif
|
||||
#ifdef CONFIG_CPU_RK3562
|
||||
{
|
||||
.compatible = "rockchip,rkv-decoder-rk3562",
|
||||
.data = &rkvdec_vdpu382_data,
|
||||
.data = &rkvdec_rk3562_data,
|
||||
},
|
||||
#endif
|
||||
#ifdef CONFIG_CPU_RK3576
|
||||
|
||||
@@ -80,6 +80,9 @@
|
||||
#define RKISP_CMD_GET_OFFLINE_RAW_BUFCNT \
|
||||
_IOR('V', BASE_VIDIOC_PRIVATE + 22, int)
|
||||
|
||||
#define RKISP_CMD_SET_FPN \
|
||||
_IOW('V', BASE_VIDIOC_PRIVATE + 25, struct rkisp_fpn_cfg)
|
||||
|
||||
/****************ISP VIDEO IOCTL******************************/
|
||||
|
||||
#define RKISP_CMD_GET_CSI_MEMORY_MODE \
|
||||
@@ -129,6 +132,7 @@
|
||||
|
||||
/* BASE_VIDIOC_PRIVATE + 115 for RKISP_CMD_GET_PARAMS_V39 */
|
||||
/* BASE_VIDIOC_PRIVATE + 116 for RKISP_CMD_GET_PARAMS_V33 */
|
||||
/* BASE_VIDIOC_PRIVATE + 117 for RKISP_CMD_SET_QUICK_STREAM */
|
||||
|
||||
/**********************EVENT_PRIVATE***************************/
|
||||
#define RKISP_V4L2_EVENT_AIISP_LINECNT (V4L2_EVENT_PRIVATE_START + 1)
|
||||
@@ -349,6 +353,29 @@ struct isp2x_mesh_head {
|
||||
__u32 data_oft;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
enum {
|
||||
RKISP_FPN_DATA_SHIFT_0 = 0,
|
||||
RKISP_FPN_DATA_SHIFT_1,
|
||||
RKISP_FPN_DATA_SHIFT_2,
|
||||
RKISP_FPN_DATA_SHIFT_3,
|
||||
};
|
||||
|
||||
/* struct rkisp_aiisp_cfg
|
||||
* en: enable fpn function
|
||||
* row_en: row fpn mode other column fpn
|
||||
* data_shift: fpn data shift, 4bits of 7bits calculate fpn data
|
||||
* buf_size: buf size: row_en ? height : width
|
||||
* buf: fpn data, two row or two column fpn data, 4bit one fpn data
|
||||
*/
|
||||
struct rkisp_fpn_cfg {
|
||||
char en;
|
||||
char row_en;
|
||||
char data_shift;
|
||||
char reserved;
|
||||
int buf_size;
|
||||
void *buf;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#define RKISP_AIISP_WR_LINECNT_ID 0
|
||||
#define RKISP_AIISP_RD_LINECNT_ID 1
|
||||
struct rkisp_aiisp_ev_info {
|
||||
|
||||
Reference in New Issue
Block a user