Exemple #1
0
void init_lcd()
{
	pci_sync_cache(0, (vm_offset_t)__SD_LCD_BAR_BASE, sizeof(__SD_LCD_BAR_BASE), SYNC_R);
    memset(SD_LCD_BAR_BASE, 0x00, sizeof(__SD_LCD_BAR_BASE));
    init_lcd_regs();
}
int dc_init()
{
   int MEM_ADDR =0;
   int print_count;
   int i;
   int PIXEL_COUNT = DIS_WIDTH * DIS_HEIGHT +  EXTRA_PIXEL; 
   int MEM_SIZE = PIXEL_COUNT * 4;
   int init_R = 0;
   int init_G = 0;
   int init_B = 0;
   int j,k,l,va,va_mod;
   int MEM_SIZE_6 = MEM_SIZE /6; 
   char *p="AAAAA\nBBBBBBB\nCCCCCCC\nDDDDDDD\nEEEEEEEEEEEEE\nFFFFFFFFFFFFFF\n";
   char *q = "";
   char convert[3] = {0};
   char temp[3]  = {0};
   
   //debug for dc malloc
  // char *MEM_ptr =(volatile u8*)(MEM_ADDR);  
   int  print_addr;
   int print_data;
  //////////////////////////////////////////////////////////////
  // char *MEM_ptr = (char *)malloc(MEM_SIZE,M_MBUF, 0x1);
   char *MEM_ptr = (char *)malloc(MEM_SIZE);
   MEM_ADDR = MEM_ptr;
  ///////////////////////////////////////////////////////////////
   printf("enter dc_init...\n");
   if(MEM_ptr == NULL)
   {
       printf("frame buffer memory malloc failed!\n ");
       exit(0);
   }
   else
   {

        for (i=0;i<MEM_SIZE;i+=4)
        {
           //paint ARGB 0 255 0 0 high <- low
           *(MEM_ptr+i) = 0 ;
           *(MEM_ptr+i+1) = 0  ;
           *(MEM_ptr+i+2) = 255  ;
           *(MEM_ptr+i+3) = 23  ;
        }

#ifdef __mips__
	printf("==sync cache\n");
		pci_sync_cache(0, (vm_offset_t)MEM_ptr, MEM_SIZE, SYNC_W);
#endif


	
   }

   printf("frame buffer addr: %x \n",(MEM_ADDR+0x00));
  //write_reg(0x501030,0x23456789);
  //int *ptr = (int *)malloc(sizeof(int));
  //*ptr = (int *)0x501030;
  ////ptr = 0x501030;
  //*ptr = 0x23456789;
  //printf("addr:%x  data:%x",ptr,(*ptr));

   printf("frame buffer data: %x \n",readl((MEM_ADDR+0x00)));
  
  //config display controller panel 0 reg 
  write_reg((DC_BASE_ADDR+0x00),0x00000000);
  write_reg((DC_BASE_ADDR+0x00),0x00000004);
  write_reg((DC_BASE_ADDR+0x20),MEM_ADDR  );
  write_reg((DC_BASE_ADDR+0x40),0x00000500);
  write_reg((0xbc301360  +0x00),0x00000000);
  write_reg((0xbc301360  +0x20),0x00000000);
  write_reg((0xbc301360  +0x40),0x00000000);
  write_reg((0xbc301360  +0x60),0x80001111);
  write_reg((0xbc301360  +0x80),0x33333333);
  write_reg((0xbc301400  +0x00),0x014f0140);
  write_reg((0xbc301400  +0x20),0x414a0145);
  write_reg((0xbc301400  +0x80),0x00fa00f0);
  write_reg((0xbc301400  +0xa0),0x40f700f5);
  write_reg((0xbc301520  +0x00),0x00020202);
  write_reg((0xbc301530  +0x00),MEM_ADDR  );
  write_reg((0xbc301540  +0x00),0x00060122);
  write_reg((0xbc301550  +0x00),0x00eeeeee);
  write_reg((0xbc301560  +0x00),0x00aaaaaa);
 //config display controller panel 1 reg
  write_reg((DC_BASE_ADDR_1+0x00),0x00000000);
  write_reg((DC_BASE_ADDR_1+0x00),0x00000004);
  write_reg((DC_BASE_ADDR_1+0x20),MEM_ADDR  );
//800x600@60
//write_reg((DC_BASE_ADDR_1+0x40),0x00000C80);
  write_reg((DC_BASE_ADDR_1+0x40),0x00000A00); //640
//  write_reg((DC_BASE_ADDR_1+0x40),0x00001558); //1366
  write_reg((0xbc301370  +0x00),0x00000000);
  write_reg((0xbc301370  +0x20),0x00000000);
  write_reg((0xbc301370  +0x40),0x00000000);
  write_reg((0xbc301370  +0x60),0x80001111);
  write_reg((0xbc301370  +0x80),0x33333333);

 //write_reg((0xbc301410  +0x00),0x038a0320);
 //write_reg((0xbc301410  +0x20),0x43610324);
 //write_reg((0xbc301410  +0x80),0x02940240);
 //write_reg((0xbc301410  +0xa0),0x426c0264);

//800x600@60
// write_reg((0xbc301410  +0x00),0x04000320);
// write_reg((0xbc301410  +0x20),0x43900340);
// write_reg((0xbc301410  +0x80),0x026E0258);
// write_reg((0xbc301410  +0xa0),0x425C0259);
/*704x598  
  write_reg((0xbc301410  +0x00),0x038002C0);
  write_reg((0xbc301410  +0x20),0x432002D8);
  write_reg((0xbc301410  +0x80),0x026B0256);
  write_reg((0xbc301410  +0xa0),0x425A0257);
*/
// 640x480@60 frequecy:23.86hz
// write_reg((0xbc301410  +0x00),0x03200280);
// write_reg((0xbc301410  +0x20),0x42D00290);
// write_reg((0xbc301410  +0x80),0x01F101E0);
// write_reg((0xbc301410  +0xa0),0x41E401E1);

// 640x480@60 frequecy:25.18hz
 write_reg((0xbc301410  +0x00),0x03200280);
 write_reg((0xbc301410  +0x20),0x42F00290);
 write_reg((0xbc301410  +0x80),0x020D01E0);
 write_reg((0xbc301410  +0xa0),0x41EC01EA);

//1366*768@20 23.78Hz
//write_reg((0xbc301410  +0x00),0x07080556);
//write_reg((0xbc301410  +0x20),0x463005A0);
//write_reg((0xbc301410  +0x80),0x031B0300);
//write_reg((0xbc301410  +0xa0),0x43040301);
  
// 640x480@60 frequecy:23.86hz  another set
//write_reg((0xbc301410  +0x00),0x03200280);
//write_reg((0xbc301410  +0x20),0x42F00290);
//write_reg((0xbc301410  +0x80),0x020D01E0);
//write_reg((0xbc301410  +0xa0),0x41EC01EA);

//640x480@50
 // write_reg((0xbc301410  +0x00),0x03100280);
 // write_reg((0xbc301410  +0x20),0x42C80288);
 // write_reg((0xbc301410  +0x80),0x01EF01E0);
 // write_reg((0xbc301410  +0xa0),0x41E401E1);
  
  write_reg((0xbc301520  +0x00),0x00020202);
  write_reg((0xbc301530  +0x00),MEM_ADDR  );
  write_reg((0xbc301540  +0x00),0x00020002);
  write_reg((0xbc301550  +0x00),0x00eeeeee);
  write_reg((0xbc301560  +0x00),0x00aaaaaa);


  write_reg((DC_BASE_ADDR+0x00),0x00100104);
  write_reg((DC_BASE_ADDR_1+0x00),0x00100104);
  printf("display controller reg config complete!\n");

  printf("read reg addr begin...\n");

  printf("read panel 0 reg:\n");
  print_data = readl((DC_BASE_ADDR+0x00));
  printf("read first data successfully!\n");
  printf("reg addr:%x,reg data:%x\n",(DC_BASE_ADDR+0x00),print_data);
  printf("reg addr:%x,reg data:%x\n",(DC_BASE_ADDR+0x00),(readl((DC_BASE_ADDR+0x00))));
  printf("reg addr:%x,reg data:%x\n",(DC_BASE_ADDR+0x20),(readl((DC_BASE_ADDR+0x20))));
  printf("reg addr:%x,reg data:%x\n",(DC_BASE_ADDR+0x40),(readl((DC_BASE_ADDR+0x40))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301360  +0x00),(readl((0xbc301360  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301360  +0x20),(readl((0xbc301360  +0x20))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301360  +0x40),(readl((0xbc301360  +0x40))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301360  +0x60),(readl((0xbc301360  +0x60))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301360  +0x80),(readl((0xbc301360  +0x80))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301400  +0x00),(readl((0xbc301400  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301400  +0x20),(readl((0xbc301400  +0x20))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301400  +0x80),(readl((0xbc301400  +0x80))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301400  +0xa0),(readl((0xbc301400  +0xa0))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301520  +0x00),(readl((0xbc301520  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301530  +0x00),(readl((0xbc301530  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301540  +0x00),(readl((0xbc301540  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301550  +0x00),(readl((0xbc301550  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301560  +0x00),(readl((0xbc301560  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(DC_BASE_ADDR+0x00),(readl((DC_BASE_ADDR+0x00))));

  printf("\n\nread panel 1 reg:\n");

  printf("reg addr:%x,reg data:%x\n",(DC_BASE_ADDR_1+0x00),(readl((DC_BASE_ADDR_1+0x00))));
  printf("reg addr:%x,reg data:%x\n",(DC_BASE_ADDR_1+0x20),(readl((DC_BASE_ADDR_1+0x20))));
  printf("reg addr:%x,reg data:%x\n",(DC_BASE_ADDR_1+0x40),(readl((DC_BASE_ADDR_1+0x40))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301370  +0x00),(readl((0xbc301370  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301370  +0x20),(readl((0xbc301370  +0x20))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301370  +0x40),(readl((0xbc301370  +0x40))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301370  +0x60),(readl((0xbc301370  +0x60))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301370  +0x80),(readl((0xbc301370  +0x80))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301410  +0x00),(readl((0xbc301410  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301410  +0x20),(readl((0xbc301410  +0x20))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301410  +0x80),(readl((0xbc301410  +0x80))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301410  +0xa0),(readl((0xbc301410  +0xa0))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301520  +0x00),(readl((0xbc301520  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301530  +0x00),(readl((0xbc301530  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301540  +0x00),(readl((0xbc301540  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301550  +0x00),(readl((0xbc301550  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(0xbc301560  +0x00),(readl((0xbc301560  +0x00))));
  printf("reg addr:%x,reg data:%x\n",(DC_BASE_ADDR_1+0x00),(readl((DC_BASE_ADDR_1+0x00))));

  printf("read frame buffer begin...\n");
       for(j=0;j<DIS_HEIGHT;j+=100)
       {
  //          printf("line %d;\n",j);
            for (i=1;i<DIS_WIDTH*4;i+=4*10)
            {
              printf("%x %x %x %x \t",*(MEM_ptr+j*DIS_WIDTH*4+i-1),*(MEM_ptr+j*DIS_WIDTH*4+i),*(MEM_ptr+j*DIS_WIDTH*4+i+1),*(MEM_ptr+j*DIS_WIDTH*4+i+2)); 
            }
    //        printf("\n\n\n\n");
       }

  printf("\nGPU twodclearl test begin...\n");
  gpu_reg_wr();
  gpu_twodclearl(MEM_ptr);
  printf("write cmd buff end...\n");
  gpu_reg_wr();

  //wait
  for(j=0;j<500;j++)
  {
          printf("debug out reg:%x\n",readl(0xbc200004));
  }
  printf("wait end...\n");
  printf("read frame buffer begin...\n");
       for(j=0;j<DIS_HEIGHT;j+=100)
       {
  //          printf("line %d;\n",j);
            for (i=1;i<DIS_WIDTH*4;i+=4*10)
            {
              printf("%x %x %x %x \t",*(MEM_ptr+j*DIS_WIDTH*4+i-1),*(MEM_ptr+j*DIS_WIDTH*4+i),*(MEM_ptr+j*DIS_WIDTH*4+i+1),*(MEM_ptr+j*DIS_WIDTH*4+i+2)); 
            }
    //        printf("\n\n\n\n");
       }

  
#ifdef __mips__
	printf("==sync cache\n");
		pci_sync_cache(0, (vm_offset_t)MEM_ptr,MEM_SIZE, SYNC_W);
#endif

   return 0;
    
}