Merge commit 'f9324b0e31d0dbe11cc2faf6d360e838aa8b14c4'

* commit 'f9324b0e31d0dbe11cc2faf6d360e838aa8b14c4':
  ARM: configs: rv1126b_defconfig: Disable CONFIG_ROCKCHIP_PVTM
  ARM: configs: add rv1126b_linux_defconfig to support RV1126B SoC with Linux OS
  media: rockchip: vpss: set ROCKIT_BUF_NUM_MAX to 20
  media: i2c: rk628: fix read timing err
  soc: rockchip: opp_select: Fix memleak in rockchip_opp_set_config()
  media: rockchip: vicap fixes yuv input order error of dvp for rk3576
  media: rockchip: fec: Fix incorrect buffer size configuration
  mm: defer init highmem page when CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK=y
  init: use pageblock to free highmem instead of page when CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK=y
  media: rockchip: vpss: fix RKVPSS_VPSS_ONLINE value error in offline mode

Change-Id: I655c70a12ebc79d0c02ba04b2c20c84e1b782df7
This commit is contained in:
Tao Huang
2025-04-22 19:51:17 +08:00
13 changed files with 673 additions and 84 deletions

View File

@@ -17,7 +17,6 @@ CONFIG_NLS_CODEPAGE_936=y
# CONFIG_PM_DEVFREQ is not set
# CONFIG_PRINTK_TIME is not set
# CONFIG_PWM is not set
# CONFIG_ROCKCHIP_PVTM is not set
# CONFIG_RTC_CLASS is not set
# CONFIG_SOUND is not set
CONFIG_SPI=y

View File

@@ -175,7 +175,6 @@ CONFIG_CPU_RV1126B=y
CONFIG_ROCKCHIP_AMP=y
CONFIG_ROCKCHIP_CPUINFO=y
CONFIG_ROCKCHIP_PM_DOMAINS=y
CONFIG_ROCKCHIP_PVTM=y
CONFIG_ROCKCHIP_SYSTEM_MONITOR=y
CONFIG_FIQ_DEBUGGER=y
CONFIG_FIQ_DEBUGGER_NO_SLEEP=y

View File

@@ -0,0 +1,343 @@
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_KERNEL_XZ=y
CONFIG_DEFAULT_HOSTNAME="localhost"
CONFIG_SYSVIPC=y
CONFIG_NO_HZ_IDLE=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_LD_DEAD_CODE_DATA_ELIMINATION=y
# CONFIG_BUG is not set
# CONFIG_BASE_FULL is not set
# CONFIG_IO_URING is not set
CONFIG_EMBEDDED=y
CONFIG_ARCH_ROCKCHIP=y
# CONFIG_HARDEN_BRANCH_PREDICTOR is not set
# CONFIG_HARDEN_BRANCH_HISTORY is not set
# CONFIG_VDSO is not set
# CONFIG_CACHE_L2X0 is not set
# CONFIG_ARM_ERRATA_643719 is not set
CONFIG_SMP=y
CONFIG_SCHED_MC=y
CONFIG_VMSPLIT_3G_OPT=y
CONFIG_HOTPLUG_CPU=y
CONFIG_ARM_PSCI=y
CONFIG_THUMB2_KERNEL=y
CONFIG_HIGHMEM=y
# CONFIG_CPU_SW_DOMAIN_PAN is not set
CONFIG_ARCH_FORCE_MAX_ORDER=9
CONFIG_UACCESS_WITH_MEMCPY=y
# CONFIG_STACKPROTECTOR_PER_TASK is not set
CONFIG_CMDLINE="user_debug=31"
CONFIG_CMDLINE_EXTEND=y
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPUFREQ_DT=y
CONFIG_ARM_ROCKCHIP_CPUFREQ=y
CONFIG_CPU_IDLE=y
CONFIG_ARM_CPUIDLE=y
CONFIG_ARM_PSCI_CPUIDLE=y
# CONFIG_ARM_PSCI_CPUIDLE_DOMAIN is not set
CONFIG_VFP=y
CONFIG_NEON=y
# CONFIG_SUSPEND is not set
CONFIG_JUMP_LABEL=y
# CONFIG_SECCOMP is not set
# CONFIG_STACKPROTECTOR_STRONG is not set
# CONFIG_STRICT_KERNEL_RWX is not set
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_PARTITION_ADVANCED=y
CONFIG_CMDLINE_PARTITION=y
# CONFIG_MQ_IOSCHED_KYBER is not set
CONFIG_IOSCHED_BFQ=y
# CONFIG_SWAP is not set
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
CONFIG_CMA=y
CONFIG_CMA_INACTIVE=y
# CONFIG_VM_EVENT_COUNTERS is not set
CONFIG_LRU_GEN=y
CONFIG_LRU_GEN_ENABLED=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_INET_TABLE_PERTURB_ORDER=8
# CONFIG_INET_DIAG is not set
# CONFIG_IPV6_SIT is not set
CONFIG_BT=y
CONFIG_BT_HCIUART=y
CONFIG_BT_HCIUART_H4=y
CONFIG_RFKILL=y
CONFIG_RFKILL_RK=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
# CONFIG_ALLOW_DEV_COREDUMP is not set
CONFIG_ROCKCHIP_SIP=y
CONFIG_MTD=y
CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_OF_PARTS is not set
CONFIG_MTD_BLOCK=y
CONFIG_MTD_SPI_NAND=y
CONFIG_MTD_SPI_NOR=y
CONFIG_MTD_SPI_NOR_MISC=y
# CONFIG_MTD_SPI_NOR_DEVICE_AUTOSELECT is not set
CONFIG_MTD_SPI_NOR_GIGADEVICE=y
CONFIG_MTD_SPI_NOR_MACRONIX=y
CONFIG_MTD_SPI_NOR_WINBOND=y
CONFIG_MTD_UBI=y
CONFIG_MTD_UBI_BLOCK=y
CONFIG_NETDEVICES=y
# CONFIG_NET_CORE is not set
CONFIG_STMMAC_ETH=y
# CONFIG_DWMAC_GENERIC is not set
CONFIG_ROCKCHIP_FEPHY=y
# CONFIG_USB_NET_DRIVERS is not set
# CONFIG_WLAN_VENDOR_ADMTEK is not set
# CONFIG_WLAN_VENDOR_ATH is not set
# CONFIG_WLAN_VENDOR_ATMEL is not set
# CONFIG_WLAN_VENDOR_BROADCOM is not set
# CONFIG_WLAN_VENDOR_CISCO is not set
# CONFIG_WLAN_VENDOR_INTEL is not set
# CONFIG_WLAN_VENDOR_INTERSIL is not set
# CONFIG_WLAN_VENDOR_MARVELL is not set
# CONFIG_WLAN_VENDOR_MEDIATEK is not set
# CONFIG_WLAN_VENDOR_MICROCHIP is not set
# CONFIG_WLAN_VENDOR_RALINK is not set
# CONFIG_WLAN_VENDOR_REALTEK is not set
# CONFIG_WLAN_VENDOR_RSI is not set
# CONFIG_WLAN_VENDOR_ST is not set
# CONFIG_WLAN_VENDOR_TI is not set
# CONFIG_WLAN_VENDOR_ZYDAS is not set
# CONFIG_WLAN_VENDOR_QUANTENNA is not set
CONFIG_WL_ROCKCHIP=y
# CONFIG_BCMDHD is not set
CONFIG_INPUT_EVDEV=y
CONFIG_KEYBOARD_ADC=y
# CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_SERIO is not set
# CONFIG_VT is not set
# CONFIG_LEGACY_PTYS is not set
CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=8
CONFIG_SERIAL_8250_RUNTIME_UARTS=8
CONFIG_SERIAL_8250_DW=y
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_ROCKCHIP=y
# CONFIG_RANDOM_TRUST_BOOTLOADER is not set
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MUX=y
CONFIG_I2C_GPIO=y
CONFIG_I2C_RK3X=y
CONFIG_SPI=y
CONFIG_SPI_ROCKCHIP=y
CONFIG_SPI_ROCKCHIP_SFC=y
CONFIG_SPI_SPIDEV=y
# CONFIG_PTP_1588_CLOCK is not set
CONFIG_GPIO_SYSFS=y
CONFIG_POWER_RESET=y
CONFIG_POWER_RESET_RESTART=y
CONFIG_SYSCON_REBOOT_MODE=y
CONFIG_POWER_SUPPLY=y
# CONFIG_HWMON is not set
CONFIG_THERMAL=y
CONFIG_THERMAL_WRITABLE_TRIPS=y
CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_CPU_THERMAL=y
CONFIG_DEVFREQ_THERMAL=y
CONFIG_ROCKCHIP_THERMAL=y
CONFIG_WATCHDOG=y
CONFIG_DW_WATCHDOG=y
CONFIG_MFD_RK808=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_PWM=y
CONFIG_REGULATOR_RK801=y
CONFIG_REGULATOR_RK808=y
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_SUPPORT_FILTER=y
# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_PLATFORM_SUPPORT=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_VIDEO_ROCKCHIP_AIISP=y
CONFIG_VIDEO_ROCKCHIP_AVSP=y
CONFIG_VIDEO_ROCKCHIP_CIF=y
CONFIG_VIDEO_ROCKCHIP_FEC=y
CONFIG_VIDEO_ROCKCHIP_ISP=y
CONFIG_VIDEO_ROCKCHIP_VPSS=y
CONFIG_VIDEO_GC2053=y
CONFIG_VIDEO_GC8613=y
CONFIG_VIDEO_IMX415=y
CONFIG_VIDEO_OS04A10=y
CONFIG_VIDEO_PS5458=y
CONFIG_VIDEO_SC200AI=y
CONFIG_VIDEO_SC3336=y
CONFIG_VIDEO_SC401AI=y
CONFIG_VIDEO_SC4336=y
CONFIG_VIDEO_SC450AI=y
CONFIG_VIDEO_SC530AI=y
CONFIG_VIDEO_SC635HAI=y
CONFIG_VIDEO_SC850SL=y
CONFIG_VIDEO_TECHPOINT=y
CONFIG_DRM=y
CONFIG_DRM_IGNORE_IOTCL_PERMIT=y
CONFIG_DRM_ROCKCHIP=y
CONFIG_ROCKCHIP_DRM_DEBUG=y
CONFIG_ROCKCHIP_VOP=y
CONFIG_ROCKCHIP_DW_MIPI_DSI=y
CONFIG_ROCKCHIP_RGB=y
CONFIG_DRM_PANEL_SIMPLE=y
CONFIG_DRM_PANEL_SIMPLE_OF_ONLY=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_PWM=y
CONFIG_ROCKCHIP_MULTI_RGA=y
CONFIG_ROCKCHIP_RGA_PROC_FS=y
# CONFIG_ROCKCHIP_RGA_DEBUG_FS is not set
CONFIG_ROCKCHIP_MPP_OSAL=y
CONFIG_ROCKCHIP_DVBM=y
CONFIG_SOUND=y
CONFIG_SND=y
# CONFIG_SND_PCM_TIMER is not set
# CONFIG_SND_SUPPORT_OLD_API is not set
# CONFIG_SND_DRIVERS is not set
# CONFIG_SND_ARM is not set
# CONFIG_SND_SPI is not set
CONFIG_SND_SOC=y
CONFIG_SND_SOC_ROCKCHIP=y
CONFIG_SND_SOC_ROCKCHIP_ASRC=y
CONFIG_SND_SOC_ROCKCHIP_PDM_V2=y
CONFIG_SND_SOC_ROCKCHIP_SAI=y
CONFIG_SND_SOC_ROCKCHIP_MULTICODECS=y
CONFIG_SND_SOC_DUMMY_CODEC=y
CONFIG_SND_SOC_RK3506=y
CONFIG_SND_SOC_RK817=y
CONFIG_SND_SOC_RK_DSM=y
CONFIG_SND_SIMPLE_CARD=y
# CONFIG_HID is not set
# CONFIG_USB_HID is not set
CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_HCD_PLATFORM=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PLATFORM=y
CONFIG_USB_DWC3=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_VBUS_DRAW=500
CONFIG_USB_CONFIGFS=y
CONFIG_USB_CONFIGFS_UEVENT=y
CONFIG_USB_CONFIGFS_F_FS=y
CONFIG_USB_CONFIGFS_F_UAC1=y
CONFIG_USB_CONFIGFS_F_UAC2=y
CONFIG_USB_CONFIGFS_F_HID=y
CONFIG_USB_CONFIGFS_F_UVC=y
CONFIG_MMC=y
# CONFIG_PWRSEQ_EMMC is not set
CONFIG_MMC_BLOCK_MINORS=32
CONFIG_MMC_QUEUE_DEPTH=1
CONFIG_MMC_DW=y
CONFIG_MMC_DW_ROCKCHIP=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_RK808=y
CONFIG_RTC_DRV_ROCKCHIP=y
CONFIG_DMADEVICES=y
CONFIG_ROCKCHIP_DMA=y
CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS_ROCKCHIP=y
CONFIG_DMABUF_HEAPS_ROCKCHIP_CMA_HEAP=y
CONFIG_DMABUF_HEAPS_ROCKCHIP_CMA_ALIGNMENT=0
CONFIG_DMABUF_RK_HEAPS_DEBUG=y
# CONFIG_VIRTIO_MENU is not set
# CONFIG_VHOST_MENU is not set
CONFIG_STAGING=y
CONFIG_COMMON_CLK_PROCFS=y
CONFIG_COMMON_CLK_RK808=y
CONFIG_ROCKCHIP_CLK_OUT=y
CONFIG_ROCKCHIP_CLK_PVTPLL=y
# CONFIG_ARM_ARCH_TIMER_EVTSTREAM is not set
CONFIG_ROCKCHIP_IOMMU=y
CONFIG_CPU_RV1126B=y
CONFIG_ROCKCHIP_AMP=y
CONFIG_ROCKCHIP_CPUINFO=y
CONFIG_ROCKCHIP_OPP=y
CONFIG_ROCKCHIP_PM_DOMAINS=y
CONFIG_ROCKCHIP_SYSTEM_MONITOR=y
CONFIG_ROCKCHIP_VENDOR_STORAGE=y
CONFIG_FIQ_DEBUGGER=y
CONFIG_FIQ_DEBUGGER_NO_SLEEP=y
CONFIG_FIQ_DEBUGGER_CONSOLE=y
CONFIG_FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLE=y
CONFIG_RK_CONSOLE_THREAD=y
CONFIG_ROCKCHIP_DEBUG=y
CONFIG_ROCKCHIP_MINI_KERNEL=y
CONFIG_ROCKCHIP_NPOR_POWERGOOD=y
CONFIG_RK_CMA_PROCFS=y
CONFIG_RK_DMABUF_PROCFS=y
CONFIG_RK_MEMBLOCK_PROCFS=y
CONFIG_PM_DEVFREQ=y
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
CONFIG_DEVFREQ_GOV_USERSPACE=y
CONFIG_EXTCON=y
CONFIG_IIO=y
CONFIG_ROCKCHIP_SARADC=y
CONFIG_INV_ICM42670_SPI=y
CONFIG_PWM=y
CONFIG_PWM_ROCKCHIP=y
CONFIG_PHY_ROCKCHIP_CSI2_DPHY=y
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=y
CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=y
CONFIG_NVMEM_ROCKCHIP_OTP=y
CONFIG_ROCKCHIP_RKNPU=y
# CONFIG_ROCKCHIP_RKNPU_DEBUG_FS is not set
CONFIG_ROCKCHIP_RKNPU_PROC_FS=y
CONFIG_ROCKCHIP_RKNPU_DMA_HEAP=y
CONFIG_EXT4_FS=y
CONFIG_EXPORTFS_BLOCK_OPS=y
# CONFIG_DNOTIFY is not set
CONFIG_VFAT_FS=y
CONFIG_TMPFS=y
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
# CONFIG_JFFS2_RTIME is not set
CONFIG_UBIFS_FS=y
CONFIG_UBIFS_FS_ADVANCED_COMPR=y
# CONFIG_UBIFS_FS_ZSTD is not set
CONFIG_SQUASHFS=y
# CONFIG_SQUASHFS_ZLIB is not set
CONFIG_SQUASHFS_XZ=y
CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y
# CONFIG_XZ_DEC_X86 is not set
# CONFIG_XZ_DEC_POWERPC is not set
# CONFIG_XZ_DEC_IA64 is not set
# CONFIG_XZ_DEC_SPARC is not set
CONFIG_DMA_CMA=y
CONFIG_CMA_SIZE_MBYTES=0
CONFIG_PRINTK_TIME=y
CONFIG_PRINTK_TIME_FROM_ARM_ARCH_TIMER=y
# CONFIG_DEBUG_MISC is not set
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
CONFIG_DEBUG_FS=y
# CONFIG_SLUB_DEBUG is not set
CONFIG_PANIC_ON_OOPS=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
CONFIG_HARDLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
# CONFIG_DETECT_HUNG_TASK is not set
# CONFIG_SCHED_DEBUG is not set
# CONFIG_RCU_TRACE is not set
# CONFIG_FTRACE is not set
# CONFIG_RUNTIME_TESTING_MENU is not set

View File

@@ -245,6 +245,9 @@ static void __init free_highpages(void)
phys_addr_t range_start, range_end;
u64 i;
if (IS_ENABLED(CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK))
return;
/* set highmem page free */
for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
&range_start, &range_end, NULL) {

View File

@@ -1552,6 +1552,44 @@ u32 rk628_hdmirx_get_tmdsclk_cnt(struct rk628 *rk628)
}
EXPORT_SYMBOL(rk628_hdmirx_get_tmdsclk_cnt);
struct rk628_timings {
int vic;
int hactive;
int hfp;
int hsync;
int hbp;
int htotal;
int vactive;
int vfp;
int vsync;
int vbp;
int vtotal;
int clock;
};
static const struct rk628_timings pre_timing[] = {
{ 2, 720, 16, 62, 60, 858, 480, 9, 6, 30, 525, 27000000 },
{ 3, 720, 16, 62, 60, 858, 480, 9, 6, 30, 525, 27000000 },
{ 4, 1280, 110, 40, 220, 1650, 720, 5, 5, 20, 750, 74250000},
{ 16, 1920, 88, 44, 148, 2200, 1080, 4, 5, 36, 1125, 148500000 },
{ 19, 1280, 440, 40, 220, 1980, 720, 5, 5, 20, 750, 74250000},
{ 31, 1920, 528, 44, 148, 2640, 1080, 4, 5, 36, 1125, 148500000},
{ 32, 1920, 638, 44, 148, 2750, 1080, 4, 5, 36, 1125, 74250000},
{ 33, 1920, 528, 44, 148, 2640, 1080, 4, 5, 36, 1125, 74250000},
{ 34, 1920, 88, 44, 148, 2200, 1080, 4, 5, 36, 1125, 74250000},
{ 62, 1280, 1760, 40, 220, 3300, 720, 5, 5, 20, 750, 74250000},
{ 93, 3840, 1276, 88, 296, 5500, 2160, 8, 10, 72, 2250, 297000000 },
{ 94, 3840, 1056, 88, 296, 5280, 2160, 8, 10, 72, 2250, 297000000 },
{ 95, 3840, 176, 88, 296, 4400, 2160, 8, 10, 72, 2250, 297000000 },
{ 96, 3840, 1056, 88, 296, 5280, 2160, 8, 10, 72, 2250, 594000000 },
{ 97, 3840, 176, 88, 296, 4400, 2160, 8, 10, 72, 2250, 594000000 },
{ 103, 3840, 1276, 88, 296, 5500, 2160, 8, 10, 72, 2250, 297000000 },
{ 104, 3840, 1056, 88, 296, 5280, 2160, 8, 10, 72, 2250, 297000000 },
{ 105, 3840, 176, 88, 296, 4400, 2160, 8, 10, 72, 2250, 297000000 },
{ 106, 3840, 1056, 88, 296, 5280, 2160, 8, 10, 72, 2250, 594000000 },
{ 107, 3840, 176, 88, 296, 4400, 2160, 8, 10, 72, 2250, 594000000 },
};
static int rk628_hdmirx_read_timing(struct rk628 *rk628,
struct v4l2_dv_timings *timings)
{
@@ -1564,6 +1602,7 @@ static int rk628_hdmirx_read_timing(struct rk628 *rk628,
u64 tmp_data;
u8 video_fmt, vic, color_range, color_space;
u32 format;
int i, match = 0;
memset(timings, 0, sizeof(struct v4l2_dv_timings));
timings->type = V4L2_DV_BT_656_1120;
@@ -1574,55 +1613,6 @@ static int rk628_hdmirx_read_timing(struct rk628 *rk628,
bt->interlaced = val & ILACE_STS ?
V4L2_DV_INTERLACED : V4L2_DV_PROGRESSIVE;
rk628_i2c_read(rk628, HDMI_RX_MD_HACT_PX, &val);
hact = val & 0xffff;
rk628_i2c_read(rk628, HDMI_RX_MD_VAL, &val);
vact = val & 0xffff;
rk628_i2c_read(rk628, HDMI_RX_MD_HT1, &val);
htotal = (val >> 16) & 0xffff;
rk628_i2c_read(rk628, HDMI_RX_MD_VTL, &val);
vtotal = val & 0xffff;
rk628_i2c_read(rk628, HDMI_RX_MD_HT1, &val);
hofs_pix = val & 0xffff;
rk628_i2c_read(rk628, HDMI_RX_MD_VOL, &val);
vbp = (val & 0xffff) + 1;
tmdsclk_cnt = rk628_hdmirx_get_tmdsclk_cnt(rk628);
tmp_data = tmdsclk_cnt;
tmp_data = ((tmp_data * HDMIRX_MODETCLK_HZ) + HDMIRX_MODETCLK_CNT_NUM / 2);
do_div(tmp_data, HDMIRX_MODETCLK_CNT_NUM);
tmds_clk = tmp_data;
if (!htotal || !vtotal || bt->interlaced || vtotal > 3000) {
dev_err(rk628->dev, "timing err, %s htotal:%d, vtotal:%d\n",
bt->interlaced ? "interlaced is not supported," : "",
htotal, vtotal);
goto TIMING_ERR;
}
if (rk628->version >= RK628F_VERSION)
fps = tmds_clk / (htotal * vtotal);
else
fps = (tmds_clk + (htotal * vtotal) / 2) / (htotal * vtotal);
rk628_i2c_read(rk628, HDMI_RX_MD_HT0, &val);
modetclk_cnt_hs = val & 0xffff;
hs = (tmdsclk_cnt * modetclk_cnt_hs + HDMIRX_MODETCLK_CNT_NUM / 2) /
HDMIRX_MODETCLK_CNT_NUM;
rk628_i2c_read(rk628, HDMI_RX_MD_VSC, &val);
modetclk_cnt_vs = val & 0xffff;
vs = (tmdsclk_cnt * modetclk_cnt_vs + HDMIRX_MODETCLK_CNT_NUM / 2) /
HDMIRX_MODETCLK_CNT_NUM;
vs = (vs + htotal / 2) / htotal;
if ((hofs_pix < hs) || (htotal < (hact + hofs_pix)) ||
(vtotal < (vact + vs + vbp)) || !vs) {
dev_err(rk628->dev, "timing err, total:%dx%d, act:%dx%d, hofs:%d, hs:%d, vs:%d, vbp:%d\n",
htotal, vtotal, hact, vact, hofs_pix, hs, vs, vbp);
goto TIMING_ERR;
}
hbp = hofs_pix - hs;
hfp = htotal - hact - hofs_pix;
vfp = vtotal - vact - vs - vbp;
rk628_i2c_read(rk628, HDMI_RX_PDEC_AVI_PB, &val);
vic = (val & VID_IDENT_CODE_MASK) >> 24;
@@ -1637,28 +1627,101 @@ static int rk628_hdmirx_read_timing(struct rk628 *rk628,
rk628->color_space = color_space;
rk628_i2c_read(rk628, HDMI_RX_PDEC_STS, &val);
rk628->dvi_mode = val & DVI_DET;
if (video_fmt == BUS_FMT_YUV420) {
//format:color depth, 5: 10bit, 4: 8bit
if (format == 5) {
htotal = htotal * 2 * 8 / 10;
hact = hact * 2 * 8 / 10;
hfp = hfp * 2 * 8 / 10;
hbp = hbp * 2 * 8 / 10;
hs = hs * 2 * 8 / 10;
} else {
htotal *= 2;
hact *= 2;
hfp *= 2;
hbp *= 2;
hs *= 2;
for (i = 0; vic && i < ARRAY_SIZE(pre_timing); i++) {
if (vic == pre_timing[i].vic) {
hact = pre_timing[i].hactive;
hfp = pre_timing[i].hfp;
hs = pre_timing[i].hsync;
hbp = pre_timing[i].hbp;
htotal = pre_timing[i].htotal;
vact = pre_timing[i].vactive;
vfp = pre_timing[i].vfp;
vs = pre_timing[i].vsync;
vbp = pre_timing[i].vbp;
vtotal = pre_timing[i].vtotal;
tmds_clk = pre_timing[i].clock;
match = 1;
break;
}
}
rk628_dbg(rk628, "cnt_num:%d, tmds_cnt:%d, hs_cnt:%d, vs_cnt:%d, hofs:%d\n",
HDMIRX_MODETCLK_CNT_NUM, tmdsclk_cnt, modetclk_cnt_hs, modetclk_cnt_vs, hofs_pix);
if (!match) {
rk628_i2c_read(rk628, HDMI_RX_MD_HACT_PX, &val);
hact = val & 0xffff;
rk628_i2c_read(rk628, HDMI_RX_MD_VAL, &val);
vact = val & 0xffff;
rk628_i2c_read(rk628, HDMI_RX_MD_HT1, &val);
htotal = (val >> 16) & 0xffff;
rk628_i2c_read(rk628, HDMI_RX_MD_VTL, &val);
vtotal = val & 0xffff;
rk628_i2c_read(rk628, HDMI_RX_MD_HT1, &val);
hofs_pix = val & 0xffff;
rk628_i2c_read(rk628, HDMI_RX_MD_VOL, &val);
vbp = (val & 0xffff) + 1;
tmdsclk_cnt = rk628_hdmirx_get_tmdsclk_cnt(rk628);
tmp_data = tmdsclk_cnt;
tmp_data = ((tmp_data * HDMIRX_MODETCLK_HZ) + HDMIRX_MODETCLK_CNT_NUM / 2);
do_div(tmp_data, HDMIRX_MODETCLK_CNT_NUM);
tmds_clk = tmp_data;
if (!htotal || !vtotal || bt->interlaced || vtotal > 3000) {
dev_err(rk628->dev, "timing err, %s htotal:%d, vtotal:%d\n",
bt->interlaced ? "interlaced is not supported," : "",
htotal, vtotal);
goto TIMING_ERR;
}
rk628_i2c_read(rk628, HDMI_RX_MD_HT0, &val);
modetclk_cnt_hs = val & 0xffff;
hs = (tmdsclk_cnt * modetclk_cnt_hs + HDMIRX_MODETCLK_CNT_NUM / 2) /
HDMIRX_MODETCLK_CNT_NUM;
rk628_i2c_read(rk628, HDMI_RX_MD_VSC, &val);
modetclk_cnt_vs = val & 0xffff;
vs = (tmdsclk_cnt * modetclk_cnt_vs + HDMIRX_MODETCLK_CNT_NUM / 2) /
HDMIRX_MODETCLK_CNT_NUM;
vs = (vs + htotal / 2) / htotal;
if ((hofs_pix < hs) || (htotal < (hact + hofs_pix)) ||
(vtotal < (vact + vs + vbp)) || !vs) {
dev_err(rk628->dev, "timing err, total:%dx%d, act:%dx%d, hofs:%d, hs:%d, vs:%d, vbp:%d\n",
htotal, vtotal, hact, vact, hofs_pix, hs, vs, vbp);
goto TIMING_ERR;
}
hbp = hofs_pix - hs;
hfp = htotal - hact - hofs_pix;
vfp = vtotal - vact - vs - vbp;
if (video_fmt == BUS_FMT_YUV420) {
//format:color depth, 5: 10bit, 4: 8bit
if (format == 5) {
htotal = htotal * 2 * 8 / 10;
hact = hact * 2 * 8 / 10;
hfp = hfp * 2 * 8 / 10;
hbp = hbp * 2 * 8 / 10;
hs = hs * 2 * 8 / 10;
} else {
htotal *= 2;
hact *= 2;
hfp *= 2;
hbp *= 2;
hs *= 2;
}
}
rk628_dbg(rk628, "cnt_num:%d, tmds_cnt:%d, hs_cnt:%d, vs_cnt:%d, hofs:%d\n",
HDMIRX_MODETCLK_CNT_NUM, tmdsclk_cnt, modetclk_cnt_hs,
modetclk_cnt_vs, hofs_pix);
}
rk628_dbg(rk628, "get current aviif: vic:%d, color_range: %s, color_space %s",
vic, bus_color_range_str[color_range], bus_color_space_str[color_space]);
if (rk628->version >= RK628F_VERSION)
fps = tmds_clk / (htotal * vtotal);
else
fps = (tmds_clk + (htotal * vtotal) / 2) / (htotal * vtotal);
bt->width = hact;
bt->height = vact;
bt->hfrontporch = hfp;
@@ -1677,12 +1740,14 @@ static int rk628_hdmirx_read_timing(struct rk628 *rk628,
bt->il_vsync = bt->vsync + 1;
bt->pixelclock /= 2;
}
if (video_fmt == BUS_FMT_YUV420) {
if (format == 5) {
bt->pixelclock = bt->pixelclock * 8 * 2;
do_div(bt->pixelclock, 10);
} else {
bt->pixelclock *= 2;
if (!match) {
if (video_fmt == BUS_FMT_YUV420) {
if (format == 5) {
bt->pixelclock = bt->pixelclock * 8 * 2;
do_div(bt->pixelclock, 10);
} else {
bt->pixelclock *= 2;
}
}
}

View File

@@ -4302,6 +4302,31 @@ static int rkcif_dvp_get_input_yuv_order(struct rkcif_stream *stream)
return mask;
}
static int rkcif_dvp_get_input_yuv_order_rk3576(struct rkcif_stream *stream)
{
unsigned int mask;
const struct cif_input_fmt *fmt = stream->cif_fmt_in;
switch (fmt->mbus_code) {
case MEDIA_BUS_FMT_UYVY8_2X8:
mask = CSI_YUV_INPUT_ORDER_UYVY;
break;
case MEDIA_BUS_FMT_VYUY8_2X8:
mask = CSI_YUV_INPUT_ORDER_VYUY;
break;
case MEDIA_BUS_FMT_YUYV8_2X8:
mask = CSI_YUV_INPUT_ORDER_YUYV;
break;
case MEDIA_BUS_FMT_YVYU8_2X8:
mask = CSI_YUV_INPUT_ORDER_YVYU;
break;
default:
mask = CSI_YUV_INPUT_ORDER_UYVY;
break;
}
return mask;
}
static int rkcif_csi_get_output_type_mask(struct rkcif_stream *stream)
{
unsigned int mask;
@@ -7834,11 +7859,12 @@ static int rkcif_stream_start(struct rkcif_stream *stream, unsigned int mode)
val &= ~CIF_HIGH_ALIGN_RK3588;
} else {
out_fmt_mask = rkcif_dvp_get_output_type_mask_rk3576(stream);
in_fmt_yuv_order = rkcif_dvp_get_input_yuv_order_rk3576(stream);
val = vsync_pol | href_pol
| inputmode
| yc_swap
| out_fmt_mask
| stream->cif_fmt_in->dvp_fmt_val
| in_fmt_yuv_order
| multi_id_en
| xfer_mode
| multi_id_sel | multi_id_mode

View File

@@ -102,7 +102,7 @@ static int buf_alloc(struct file *file, struct rkfec_buf *info)
return -ENOMEM;
#if IS_LINUX_VERSION_AT_LEAST_6_1
init_vb2(ofl, buf);
mem = ops->alloc(&buf->vb, hw->dev, info->size);
mem = ops->alloc(&buf->vb, hw->dev, size);
#else
mem = ops->alloc(hw->dev, DMA_ATTR_NO_KERNEL_MAPPING, size,
DMA_BIDIRECTIONAL, GFP_KERNEL | GFP_DMA32);
@@ -141,7 +141,7 @@ static int buf_alloc(struct file *file, struct rkfec_buf *info)
list_add_tail(&buf->list, &ofl->list);
mutex_unlock(&hw->dev_lock);
v4l2_dbg(1, rkfec_debug, &ofl->v4l2_dev, "%s file:%p, fd:%d dbuf:%p size %d\n",
__func__, file, fd, dbuf, info->size);
__func__, file, fd, dbuf, size);
return 0;
err_dmabuf_fd:

View File

@@ -1727,11 +1727,15 @@ static int rkvpss_ofl_run(struct rkvpss_offline_dev *ofl,
if (!hw->is_ofl_ch[i])
continue;
mask |= (RKVPSS_ISP2VPSS_CHN0_SEL(3) << i * 2);
if (hw->is_ofl_cmsc)
mask |= RKVPSS_ISP2VPSS_ONLINE2_CMSC_EN;
if (cfg->output[i].enable)
val |= (RKVPSS_ISP2VPSS_CHN0_SEL(1) << i * 2);
}
if (hw->is_ofl_cmsc) {
val |= RKVPSS_ISP2VPSS_ONLINE2_CMSC_EN;
mask |= RKVPSS_ISP2VPSS_ONLINE2_CMSC_EN;
}
val |= RKVPSS_ISP2VPSS_ONLINE2;
mask |= RKVPSS_ISP2VPSS_ONLINE2;
rkvpss_hw_set_bits(hw, RKVPSS_VPSS_ONLINE, mask, val);
update = 0;

View File

@@ -1541,6 +1541,7 @@ static int rockchip_opp_set_config(struct device *dev, struct rockchip_opp_info
struct clk *clk = NULL;
const char *reg_names[] = {NULL, NULL, NULL};
const char *clk_names[] = {NULL, NULL, NULL};
int ret = 0;
if (clk_name) {
clk = clk_get(dev, clk_name);
@@ -1592,7 +1593,8 @@ static int rockchip_opp_set_config(struct device *dev, struct rockchip_opp_info
info->opp_token = dev_pm_opp_set_config(dev, &config);
if (info->opp_token < 0) {
dev_err(dev, "failed to set opp config\n");
return info->opp_token;
ret = info->opp_token;
goto err;
}
/*
@@ -1602,10 +1604,15 @@ static int rockchip_opp_set_config(struct device *dev, struct rockchip_opp_info
*/
if (rockchip_opp_set_regulator_helper(dev, info)) {
dev_err(dev, "failed to set opp regulator helper\n");
return -EINVAL;
dev_pm_opp_clear_config(info->opp_token);
info->opp_token = 0;
ret = -EINVAL;
}
return 0;
err:
kfree(config.supported_hw);
return ret;
}
void rockchip_opp_dvfs_lock(struct rockchip_opp_info *info)
@@ -1778,6 +1785,7 @@ EXPORT_SYMBOL(rockchip_init_opp_info);
void rockchip_uninit_opp_info(struct device *dev, struct rockchip_opp_info *info)
{
dev_pm_opp_clear_config(info->opp_token);
info->opp_token = 0;
}
EXPORT_SYMBOL(rockchip_uninit_opp_info);

View File

@@ -8,7 +8,7 @@
#include <linux/dma-buf.h>
#include <linux/rk-isp2-config.h>
#define ROCKIT_BUF_NUM_MAX 5
#define ROCKIT_BUF_NUM_MAX 20
#define ROCKIT_ISP_NUM_MAX 3
#define ROCKIT_STREAM_NUM_MAX 12

View File

@@ -370,6 +370,14 @@ extern void __putback_isolated_page(struct page *page, unsigned int order,
int mt);
extern void memblock_free_pages(struct page *page, unsigned long pfn,
unsigned int order);
#ifdef CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK
extern void __init rk_free_pages_core(struct page *page, unsigned int order);
extern unsigned long __init rk_deferred_init_pages(struct zone *zone,
unsigned long pfn,
unsigned long end_pfn);
extern bool __meminit rk_defer_init_hpages(int nid, unsigned long zone_idx,
unsigned long pfn, unsigned long end_pfn);
#endif
extern void __free_pages_core(struct page *page, unsigned int order);
extern void prep_compound_page(struct page *page, unsigned int order);
extern void post_alloc_hook(struct page *page, unsigned int order,

View File

@@ -124,7 +124,19 @@ static int __init early_defer_free_block_size(char *p)
}
early_param("defer_free_block_size", early_defer_free_block_size);
#endif
/* deferred highpage stuff */
struct rk_defered_highpage_info {
unsigned long pfn_start;
unsigned long pfn_end;
struct zone *zone;
};
#define RK_DHPI_NUM_MAX 3
static struct rk_defered_highpage_info rk_dhpi[RK_DHPI_NUM_MAX];
static int rk_dhpi_num;
#endif /* CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK */
unsigned long max_low_pfn;
unsigned long min_low_pfn;
@@ -2072,9 +2084,86 @@ static void __init __free_pages_memory(unsigned long start, unsigned long end)
}
#ifdef CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK
static void __init rk_free_highpages(void)
{
#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
phys_addr_t range_start, range_end;
u64 i;
/* set highmem page free */
for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
&range_start, &range_end, NULL) {
unsigned long start = PFN_UP(range_start);
unsigned long end = PFN_DOWN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
while (start < end) {
int order;
order = min(MAX_ORDER - 1UL, __ffs(start));
while (start + (1UL << order) > end)
order--;
rk_free_pages_core(pfn_to_page(start), order);
start += (1UL << order);
cond_resched();
}
}
#endif
}
bool __meminit rk_defer_init_hpages(int nid, unsigned long zone_idx,
unsigned long pfn, unsigned long end_pfn)
{
struct pglist_data *pdata = NODE_DATA(nid);
struct zone *zone = &pdata->node_zones[zone_idx];
if (rk_dhpi_num >= RK_DHPI_NUM_MAX) {
pr_err("too much deferred page zone\n");
return false;
}
if (strstr(zone->name, "HighMem")) {
pr_debug("%s, zone : %s, pfn[0x%lx-0x%lx]\n", __func__,
zone->name, pfn, end_pfn);
rk_dhpi[rk_dhpi_num].pfn_start = pfn;
rk_dhpi[rk_dhpi_num].pfn_end = end_pfn;
rk_dhpi[rk_dhpi_num].zone = zone;
rk_dhpi_num++;
return true;
}
return false;
}
int __init defer_free_memblock(void *unused)
{
int i;
unsigned long nr_pages = 0;
pr_debug("%s, rk_dhpi_num = %d\n", __func__, rk_dhpi_num);
for (i = 0; i < rk_dhpi_num; i++) {
struct zone *zone = rk_dhpi[i].zone;
unsigned long start_pfn = rk_dhpi[i].pfn_start;
unsigned long end_pfn = rk_dhpi[i].pfn_end;
pr_info("%s, zone : %s, pfn[0x%lx-0x%lx]\n", __func__,
zone->name, start_pfn, end_pfn);
nr_pages += rk_deferred_init_pages(zone, start_pfn, end_pfn);
}
pr_debug("%s, deferred_nr_page = 0x%lx\n", __func__, nr_pages);
for (i = 0; i < db_count; i++) {
pr_debug("%s: start = %ld, end = %ld\n",
@@ -2091,9 +2180,12 @@ int __init defer_free_memblock(void *unused)
db[i].defer_end >> (20 - PAGE_SHIFT),
totalram_pages() >> (20 - PAGE_SHIFT));
}
rk_free_highpages();
return 0;
}
#endif
#endif /* CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK */
static unsigned long __init __free_memory_core(phys_addr_t start,
phys_addr_t end)

View File

@@ -1871,6 +1871,43 @@ void __init memblock_free_pages(struct page *page, unsigned long pfn,
__free_pages_core(page, order);
}
#ifdef CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK
void __init rk_free_pages_core(struct page *page, unsigned int order)
{
__free_pages_core(page, order);
totalram_pages_add(1 << order);
#ifdef CONFIG_HIGHMEM
if (PageHighMem(page))
totalhigh_pages_add(1 << order);
#endif
}
unsigned long __init rk_deferred_init_pages(struct zone *zone,
unsigned long pfn,
unsigned long end_pfn)
{
int nid = zone_to_nid(zone);
unsigned long nr_pages = 0;
int zid = zone_idx(zone);
struct page *page = NULL;
for (; pfn < end_pfn; pfn++) {
if (!page || pageblock_aligned(pfn))
page = pfn_to_page(pfn);
else
page++;
__init_single_page(page, pfn, zid, nid, true);
nr_pages++;
/* Call cond_resched() only once every 8 pages */
if ((nr_pages & 7) == 0)
cond_resched();
}
return (nr_pages);
}
#endif /* CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK */
/*
* Check that the whole (or subset of) a pageblock given by the interval of
* [start_pfn, end_pfn) is valid and within the same zone, before scanning it
@@ -6987,6 +7024,11 @@ void __meminit memmap_init_range(unsigned long size, int nid, unsigned long zone
}
#endif
#ifdef CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK
if (rk_defer_init_hpages(nid, zone, start_pfn, end_pfn))
return;
#endif
#ifdef CONFIG_ROCKCHIP_THUNDER_BOOT
/* Zero all page struct in advance */
memset(pfn_to_page(start_pfn), 0, sizeof(struct page) * size);