@@ -429,12 +429,18 @@ static uint32_t pci_size(uint32_t base, uint32_t maxbase, uint32_t mask)
429
429
* Input Parameters:
430
430
* dev - The PCI device be found
431
431
* max_bar - Max bar number(6 or 2)
432
+ * rom_addr - The pci device rom addr
432
433
*
433
434
****************************************************************************/
434
435
435
- static void pci_setup_device (FAR struct pci_device_s * dev , int max_bar )
436
+ static void pci_setup_device (FAR struct pci_device_s * dev , int max_bar ,
437
+ uint8_t rom_addr )
436
438
{
437
439
int bar ;
440
+ uint32_t orig ;
441
+ uint32_t mask ;
442
+ uint32_t size ;
443
+ uintptr_t start ;
438
444
#ifdef CONFIG_PCI_ASSIGN_ALL_BUSES
439
445
uint8_t cmd ;
440
446
@@ -449,10 +455,6 @@ static void pci_setup_device(FAR struct pci_device_s *dev, int max_bar)
449
455
int base_address_1 = PCI_BASE_ADDRESS_1 + bar * 4 ;
450
456
FAR struct pci_resource_s * res ;
451
457
unsigned int flags ;
452
- uintptr_t start ;
453
- uint32_t orig ;
454
- uint32_t mask ;
455
- uint32_t size ;
456
458
457
459
pci_read_config_dword (dev , base_address_0 , & orig );
458
460
pci_write_config_dword (dev , base_address_0 , 0xfffffffe );
@@ -546,6 +548,21 @@ static void pci_setup_device(FAR struct pci_device_s *dev, int max_bar)
546
548
}
547
549
}
548
550
551
+ pci_read_config_dword (dev , rom_addr , & orig );
552
+ pci_write_config_dword (dev , rom_addr ,
553
+ ~PCI_ROM_ADDRESS_ENABLE );
554
+ pci_read_config_dword (dev , rom_addr , & mask );
555
+ pci_write_config_dword (dev , rom_addr , orig );
556
+ start = PCI_ROM_ADDR (orig );
557
+ size = PCI_ROM_SIZE (mask );
558
+ if (start != 0 && size != 0 )
559
+ {
560
+ dev -> resource [PCI_ROM_RESOURCE ].flags |=
561
+ PCI_RESOURCE_MEM | PCI_RESOURCE_PREFETCH ;
562
+ dev -> resource [PCI_ROM_RESOURCE ].start = start ;
563
+ dev -> resource [PCI_ROM_RESOURCE ].end = start + size - 1 ;
564
+ }
565
+
549
566
#ifdef CONFIG_PCI_ASSIGN_ALL_BUSES
550
567
pci_write_config_byte (dev , PCI_COMMAND , cmd );
551
568
#endif
@@ -763,7 +780,7 @@ static void pci_scan_bus(FAR struct pci_bus_s *bus)
763
780
goto bad ;
764
781
}
765
782
766
- pci_setup_device (dev , 6 );
783
+ pci_setup_device (dev , 6 , PCI_ROM_ADDRESS );
767
784
768
785
pci_read_config_word (dev , PCI_SUBSYSTEM_ID ,
769
786
& dev -> subsystem_device );
@@ -792,7 +809,7 @@ static void pci_scan_bus(FAR struct pci_bus_s *bus)
792
809
pci_scan_bus (child_bus );
793
810
pci_postsetup_bridge (dev );
794
811
795
- pci_setup_device (dev , 2 );
812
+ pci_setup_device (dev , 2 , PCI_ROM_ADDRESS1 );
796
813
break ;
797
814
798
815
default :
0 commit comments