tree:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: d25ee88530253138d0b20d43511ca5acbda4e9f7
commit: 602670289b69b2fded3a0b2240c4877e3a015ac6 [1562/1734] fortify: Detect struct member
overflows in memcpy() at compile-time
config: i386-randconfig-s002-20220124
(
https://download.01.org/0day-ci/archive/20220125/202201251939.u3jnMQNG-lk...)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.4-dirty
#
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commi...
git remote add linux-next
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git fetch --no-tags linux-next master
git checkout 602670289b69b2fded3a0b2240c4877e3a015ac6
# save the config file to linux build tree
mkdir build_dir
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir
ARCH=i386 SHELL=/bin/bash drivers/video/fbdev/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
> drivers/video/fbdev/geode/lxfb_ops.c:602:9: sparse: sparse:
incorrect type in argument 1 (different address spaces) @@ expected void const * @@
got void [noderef] __iomem *gp_regs @@
drivers/video/fbdev/geode/lxfb_ops.c:602:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:602:9: sparse: got void [noderef] __iomem
*gp_regs
> drivers/video/fbdev/geode/lxfb_ops.c:602:9: sparse: sparse:
incorrect type in argument 1 (different address spaces) @@ expected void const * @@
got void [noderef] __iomem *gp_regs @@
drivers/video/fbdev/geode/lxfb_ops.c:602:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:602:9: sparse: got void [noderef] __iomem
*gp_regs
drivers/video/fbdev/geode/lxfb_ops.c:602:9: sparse: sparse: incorrect type in argument
2 (different address spaces) @@ expected void const * @@ got void [noderef]
__iomem *gp_regs @@
drivers/video/fbdev/geode/lxfb_ops.c:602:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:602:9: sparse: got void [noderef] __iomem
*gp_regs
> drivers/video/fbdev/geode/lxfb_ops.c:603:9: sparse: sparse:
incorrect type in argument 1 (different address spaces) @@ expected void const * @@
got void [noderef] __iomem *dc_regs @@
drivers/video/fbdev/geode/lxfb_ops.c:603:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:603:9: sparse: got void [noderef] __iomem
*dc_regs
> drivers/video/fbdev/geode/lxfb_ops.c:603:9: sparse: sparse:
incorrect type in argument 1 (different address spaces) @@ expected void const * @@
got void [noderef] __iomem *dc_regs @@
drivers/video/fbdev/geode/lxfb_ops.c:603:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:603:9: sparse: got void [noderef] __iomem
*dc_regs
drivers/video/fbdev/geode/lxfb_ops.c:603:9: sparse: sparse: incorrect type in argument
2 (different address spaces) @@ expected void const * @@ got void [noderef]
__iomem *dc_regs @@
drivers/video/fbdev/geode/lxfb_ops.c:603:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:603:9: sparse: got void [noderef] __iomem
*dc_regs
> drivers/video/fbdev/geode/lxfb_ops.c:604:9: sparse: sparse:
incorrect type in argument 1 (different address spaces) @@ expected void const * @@
got void [noderef] __iomem *vp_regs @@
drivers/video/fbdev/geode/lxfb_ops.c:604:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:604:9: sparse: got void [noderef] __iomem
*vp_regs
> drivers/video/fbdev/geode/lxfb_ops.c:604:9: sparse: sparse:
incorrect type in argument 1 (different address spaces) @@ expected void const * @@
got void [noderef] __iomem *vp_regs @@
drivers/video/fbdev/geode/lxfb_ops.c:604:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:604:9: sparse: got void [noderef] __iomem
*vp_regs
drivers/video/fbdev/geode/lxfb_ops.c:604:9: sparse: sparse: incorrect type in argument
2 (different address spaces) @@ expected void const * @@ got void [noderef]
__iomem *vp_regs @@
drivers/video/fbdev/geode/lxfb_ops.c:604:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:604:9: sparse: got void [noderef] __iomem
*vp_regs
> drivers/video/fbdev/geode/lxfb_ops.c:605:9: sparse: sparse:
incorrect type in argument 1 (different address spaces) @@ expected void const * @@
got void [noderef] __iomem * @@
drivers/video/fbdev/geode/lxfb_ops.c:605:9:
sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:605:9: sparse: got void [noderef] __iomem *
> drivers/video/fbdev/geode/lxfb_ops.c:605:9: sparse: sparse:
incorrect type in argument 1 (different address spaces) @@ expected void const * @@
got void [noderef] __iomem * @@
drivers/video/fbdev/geode/lxfb_ops.c:605:9:
sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:605:9: sparse: got void [noderef] __iomem *
drivers/video/fbdev/geode/lxfb_ops.c:605:9: sparse: sparse: incorrect type in argument
2 (different address spaces) @@ expected void const * @@ got void [noderef]
__iomem * @@
drivers/video/fbdev/geode/lxfb_ops.c:605:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:605:9: sparse: got void [noderef] __iomem *
drivers/video/fbdev/geode/lxfb_ops.c:633:9: sparse: sparse: incorrect type in argument
1 (different address spaces) @@ expected void const * @@ got void [noderef]
__iomem * @@
drivers/video/fbdev/geode/lxfb_ops.c:633:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:633:9: sparse: got void [noderef] __iomem *
drivers/video/fbdev/geode/lxfb_ops.c:633:9: sparse: sparse: incorrect type in argument
1 (different address spaces) @@ expected void const * @@ got void [noderef]
__iomem * @@
drivers/video/fbdev/geode/lxfb_ops.c:633:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:633:9: sparse: got void [noderef] __iomem *
drivers/video/fbdev/geode/lxfb_ops.c:633:9: sparse: sparse: incorrect type in argument
2 (different address spaces) @@ expected void const * @@ got void [noderef]
__iomem * @@
drivers/video/fbdev/geode/lxfb_ops.c:633:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:633:9: sparse: got void [noderef] __iomem *
drivers/video/fbdev/geode/lxfb_ops.c:760:9: sparse: sparse: incorrect type in argument
1 (different address spaces) @@ expected void const * @@ got void [noderef]
__iomem * @@
drivers/video/fbdev/geode/lxfb_ops.c:760:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:760:9: sparse: got void [noderef] __iomem *
drivers/video/fbdev/geode/lxfb_ops.c:760:9: sparse: sparse: incorrect type in argument
1 (different address spaces) @@ expected void const * @@ got void [noderef]
__iomem * @@
drivers/video/fbdev/geode/lxfb_ops.c:760:9: sparse: expected void const *
drivers/video/fbdev/geode/lxfb_ops.c:760:9: sparse: got void [noderef] __iomem *
> drivers/video/fbdev/geode/lxfb_ops.c:760:9: sparse: sparse:
incorrect type in argument 1 (different address spaces) @@ expected void * @@ got
void [noderef] __iomem * @@
drivers/video/fbdev/geode/lxfb_ops.c:760:9: sparse:
expected void *
drivers/video/fbdev/geode/lxfb_ops.c:760:9: sparse: got void [noderef] __iomem *
vim +602 drivers/video/fbdev/geode/lxfb_ops.c
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 582
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 583
static void lx_save_regs(struct lxfb_par *par)
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 584
{
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 585
uint32_t filt;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 586
int i;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 587
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 588
/* wait for the BLT engine to stop being busy */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 589
do {
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 590
i = read_gp(par, GP_BLT_STATUS);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 591
} while ((i & GP_BLT_STATUS_PB) || !(i & GP_BLT_STATUS_CE));
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 592
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 593
/* save MSRs */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 594
rdmsrl(MSR_LX_MSR_PADSEL, par->msr.padsel);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 595
rdmsrl(MSR_GLCP_DOTPLL, par->msr.dotpll);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 596
rdmsrl(MSR_LX_GLD_MSR_CONFIG, par->msr.dfglcfg);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 597
rdmsrl(MSR_LX_SPARE_MSR, par->msr.dcspare);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 598
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 599
write_dc(par, DC_UNLOCK, DC_UNLOCK_UNLOCK);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 600
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 601
/* save registers */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 @602
memcpy(par->gp, par->gp_regs, sizeof(par->gp));
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 @603
memcpy(par->dc, par->dc_regs, sizeof(par->dc));
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 @604
memcpy(par->vp, par->vp_regs, sizeof(par->vp));
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 @605
memcpy(par->fp, par->vp_regs + VP_FP_START, sizeof(par->fp));
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 606
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 607
/* save the display controller palette */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 608
write_dc(par, DC_PAL_ADDRESS, 0);
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 609
for (i = 0; i < ARRAY_SIZE(par->dc_pal); i++)
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 610
par->dc_pal[i] = read_dc(par, DC_PAL_DATA);
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 611
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 612
/* save the video processor palette */
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 613
write_vp(par, VP_PAR, 0);
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 614
for (i = 0; i < ARRAY_SIZE(par->vp_pal); i++)
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 615
par->vp_pal[i] = read_vp(par, VP_PDR);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 616
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 617
/* save the horizontal filter coefficients */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 618
filt = par->dc[DC_IRQ_FILT_CTL] | DC_IRQ_FILT_CTL_H_FILT_SEL;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 619
for (i = 0; i < ARRAY_SIZE(par->hcoeff); i += 2) {
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 620
write_dc(par, DC_IRQ_FILT_CTL, (filt & 0xffffff00) | i);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 621
par->hcoeff[i] = read_dc(par, DC_FILT_COEFF1);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 622
par->hcoeff[i + 1] = read_dc(par, DC_FILT_COEFF2);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 623
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 624
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 625
/* save the vertical filter coefficients */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 626
filt &= ~DC_IRQ_FILT_CTL_H_FILT_SEL;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 627
for (i = 0; i < ARRAY_SIZE(par->vcoeff); i++) {
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 628
write_dc(par, DC_IRQ_FILT_CTL, (filt & 0xffffff00) | i);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 629
par->vcoeff[i] = read_dc(par, DC_FILT_COEFF1);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 630
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 631
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 632
/* save video coeff ram */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 @633
memcpy(par->vp_coeff, par->vp_regs + VP_VCR, sizeof(par->vp_coeff));
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 634
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 635
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 636
static void lx_restore_gfx_proc(struct lxfb_par *par)
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 637
{
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 638
int i;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 639
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 640
/* a bunch of registers require GP_RASTER_MODE to be set first */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 641
write_gp(par, GP_RASTER_MODE, par->gp[GP_RASTER_MODE]);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 642
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 643
for (i = 0; i < ARRAY_SIZE(par->gp); i++) {
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 644
switch (i) {
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 645
case GP_RASTER_MODE:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 646
case GP_VECTOR_MODE:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 647
case GP_BLT_MODE:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 648
case GP_BLT_STATUS:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 649
case GP_HST_SRC:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 650
/* FIXME: restore LUT data */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 651
case GP_LUT_INDEX:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 652
case GP_LUT_DATA:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 653
/* don't restore these registers */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 654
break;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 655
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 656
default:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 657
write_gp(par, i, par->gp[i]);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 658
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 659
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 660
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 661
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 662
static void lx_restore_display_ctlr(struct lxfb_par *par)
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 663
{
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 664
uint32_t filt;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 665
int i;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 666
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 667
wrmsrl(MSR_LX_SPARE_MSR, par->msr.dcspare);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 668
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 669
for (i = 0; i < ARRAY_SIZE(par->dc); i++) {
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 670
switch (i) {
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 671
case DC_UNLOCK:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 672
/* unlock the DC; runs first */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 673
write_dc(par, DC_UNLOCK, DC_UNLOCK_UNLOCK);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 674
break;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 675
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 676
case DC_GENERAL_CFG:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 677
case DC_DISPLAY_CFG:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 678
/* disable all while restoring */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 679
write_dc(par, i, 0);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 680
break;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 681
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 682
case DC_DV_CTL:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 683
/* set all ram to dirty */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 684
write_dc(par, i, par->dc[i] | DC_DV_CTL_CLEAR_DV_RAM);
2c3a1e49696fd0 drivers/video/fbdev/geode/lxfb_ops.c Gustavo A. R. Silva 2020-11-20 685
break;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 686
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 687
case DC_RSVD_1:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 688
case DC_RSVD_2:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 689
case DC_RSVD_3:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 690
case DC_LINE_CNT:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 691
case DC_PAL_ADDRESS:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 692
case DC_PAL_DATA:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 693
case DC_DFIFO_DIAG:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 694
case DC_CFIFO_DIAG:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 695
case DC_FILT_COEFF1:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 696
case DC_FILT_COEFF2:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 697
case DC_RSVD_4:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 698
case DC_RSVD_5:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 699
/* don't restore these registers */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 700
break;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 701
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 702
default:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 703
write_dc(par, i, par->dc[i]);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 704
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 705
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 706
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 707
/* restore the palette */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 708
write_dc(par, DC_PAL_ADDRESS, 0);
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 709
for (i = 0; i < ARRAY_SIZE(par->dc_pal); i++)
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 710
write_dc(par, DC_PAL_DATA, par->dc_pal[i]);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 711
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 712
/* restore the horizontal filter coefficients */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 713
filt = par->dc[DC_IRQ_FILT_CTL] | DC_IRQ_FILT_CTL_H_FILT_SEL;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 714
for (i = 0; i < ARRAY_SIZE(par->hcoeff); i += 2) {
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 715
write_dc(par, DC_IRQ_FILT_CTL, (filt & 0xffffff00) | i);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 716
write_dc(par, DC_FILT_COEFF1, par->hcoeff[i]);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 717
write_dc(par, DC_FILT_COEFF2, par->hcoeff[i + 1]);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 718
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 719
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 720
/* restore the vertical filter coefficients */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 721
filt &= ~DC_IRQ_FILT_CTL_H_FILT_SEL;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 722
for (i = 0; i < ARRAY_SIZE(par->vcoeff); i++) {
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 723
write_dc(par, DC_IRQ_FILT_CTL, (filt & 0xffffff00) | i);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 724
write_dc(par, DC_FILT_COEFF1, par->vcoeff[i]);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 725
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 726
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 727
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 728
static void lx_restore_video_proc(struct lxfb_par *par)
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 729
{
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 730
int i;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 731
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 732
wrmsrl(MSR_LX_GLD_MSR_CONFIG, par->msr.dfglcfg);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 733
wrmsrl(MSR_LX_MSR_PADSEL, par->msr.padsel);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 734
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 735
for (i = 0; i < ARRAY_SIZE(par->vp); i++) {
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 736
switch (i) {
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 737
case VP_VCFG:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 738
case VP_DCFG:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 739
case VP_PAR:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 740
case VP_PDR:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 741
case VP_CCS:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 742
case VP_RSVD_0:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 743
/* case VP_VDC: */ /* why should this not be restored? */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 744
case VP_RSVD_1:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 745
case VP_CRC32:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 746
/* don't restore these registers */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 747
break;
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 748
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 749
default:
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 750
write_vp(par, i, par->vp[i]);
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 751
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 752
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 753
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 754
/* restore video processor palette */
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 755
write_vp(par, VP_PAR, 0);
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 756
for (i = 0; i < ARRAY_SIZE(par->vp_pal); i++)
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 757
write_vp(par, VP_PDR, par->vp_pal[i]);
16cdd4336fdca9 drivers/video/geode/lxfb_ops.c Daniel Drake 2010-11-30 758
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 759
/* restore video coeff ram */
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 @760
memcpy(par->vp_regs + VP_VCR, par->vp_coeff, sizeof(par->vp_coeff));
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 761
}
f694e53bd0db69 drivers/video/geode/lxfb_ops.c Andres Salomon 2008-04-28 762
:::::: The code at line 602 was first introduced by commit
:::::: f694e53bd0db69557ee8e0db2d1602818ff173b0 lxfb: add power management functionality
:::::: TO: Andres Salomon <dilinger(a)queued.net>
:::::: CC: Linus Torvalds <torvalds(a)linux-foundation.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org