Skip to content

Commit dba7700

Browse files
lipengfei28xiaoxiang781216
authored andcommitted
pci: add rom addr and rom size to resource
Signed-off-by: lipengfei28 <[email protected]>
1 parent 3250625 commit dba7700

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

drivers/pci/pci.c

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -429,12 +429,18 @@ static uint32_t pci_size(uint32_t base, uint32_t maxbase, uint32_t mask)
429429
* Input Parameters:
430430
* dev - The PCI device be found
431431
* max_bar - Max bar number(6 or 2)
432+
* rom_addr - The pci device rom addr
432433
*
433434
****************************************************************************/
434435

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)
436438
{
437439
int bar;
440+
uint32_t orig;
441+
uint32_t mask;
442+
uint32_t size;
443+
uintptr_t start;
438444
#ifdef CONFIG_PCI_ASSIGN_ALL_BUSES
439445
uint8_t cmd;
440446

@@ -449,10 +455,6 @@ static void pci_setup_device(FAR struct pci_device_s *dev, int max_bar)
449455
int base_address_1 = PCI_BASE_ADDRESS_1 + bar * 4;
450456
FAR struct pci_resource_s *res;
451457
unsigned int flags;
452-
uintptr_t start;
453-
uint32_t orig;
454-
uint32_t mask;
455-
uint32_t size;
456458

457459
pci_read_config_dword(dev, base_address_0, &orig);
458460
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)
546548
}
547549
}
548550

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+
549566
#ifdef CONFIG_PCI_ASSIGN_ALL_BUSES
550567
pci_write_config_byte(dev, PCI_COMMAND, cmd);
551568
#endif
@@ -763,7 +780,7 @@ static void pci_scan_bus(FAR struct pci_bus_s *bus)
763780
goto bad;
764781
}
765782

766-
pci_setup_device(dev, 6);
783+
pci_setup_device(dev, 6, PCI_ROM_ADDRESS);
767784

768785
pci_read_config_word(dev, PCI_SUBSYSTEM_ID,
769786
&dev->subsystem_device);
@@ -792,7 +809,7 @@ static void pci_scan_bus(FAR struct pci_bus_s *bus)
792809
pci_scan_bus(child_bus);
793810
pci_postsetup_bridge(dev);
794811

795-
pci_setup_device(dev, 2);
812+
pci_setup_device(dev, 2, PCI_ROM_ADDRESS1);
796813
break;
797814

798815
default:

include/nuttx/pci/pci_regs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@
106106
#define PCI_ROM_ADDRESS 0x30 /* Bits 31..11 are address, 10..1 reserved */
107107
#define PCI_ROM_ADDRESS_ENABLE 0x01
108108
#define PCI_ROM_ADDRESS_MASK (~0x7fful)
109+
#define PCI_ROM_ADDR(x) ((x) & PCI_ROM_ADDRESS_MASK)
110+
#define PCI_ROM_SIZE(x) (PCI_ROM_ADDR(x) & -PCI_ROM_ADDR(x))
109111

110112
#define PCI_CAPABILITY_LIST 0x34 /* Offset of first capability list entry */
111113

0 commit comments

Comments
 (0)