* [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types
@ 2021-10-07 12:50 Pali Rohár
2021-10-07 12:50 ` [PATCH 2/5] pci: Skip configuring invalid P2P bridge devices Pali Rohár
` (5 more replies)
0 siblings, 6 replies; 15+ messages in thread
From: Pali Rohár @ 2021-10-07 12:50 UTC (permalink / raw)
To: Simon Glass, Vladimir Oltean, Bin Meng, Stefan Roese; +Cc: u-boot
PCI Rom Address is currently supported only for Normal (0x00) and
Bridge (0x01) header types. Fix code accordingly.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
drivers/pci/pci_auto.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/pci/pci_auto.c b/drivers/pci/pci_auto.c
index 08082460eb86..288f7996c7c0 100644
--- a/drivers/pci/pci_auto.c
+++ b/drivers/pci/pci_auto.c
@@ -131,7 +131,8 @@ static void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
/* Configure the expansion ROM address */
dm_pci_read_config8(dev, PCI_HEADER_TYPE, &header_type);
header_type &= 0x7f;
- if (header_type != PCI_HEADER_TYPE_CARDBUS) {
+ if (header_type == PCI_HEADER_TYPE_NORMAL ||
+ header_type == PCI_HEADER_TYPE_BRIDGE) {
rom_addr = (header_type == PCI_HEADER_TYPE_NORMAL) ?
PCI_ROM_ADDRESS : PCI_ROM_ADDRESS1;
dm_pci_write_config32(dev, rom_addr, 0xfffffffe);
--
2.20.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/5] pci: Skip configuring invalid P2P bridge devices
2021-10-07 12:50 [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types Pali Rohár
@ 2021-10-07 12:50 ` Pali Rohár
2021-10-08 5:52 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
2021-10-07 12:50 ` [PATCH 3/5] pci: Fix configuring BARs Pali Rohár
` (4 subsequent siblings)
5 siblings, 2 replies; 15+ messages in thread
From: Pali Rohár @ 2021-10-07 12:50 UTC (permalink / raw)
To: Simon Glass, Vladimir Oltean, Bin Meng, Stefan Roese; +Cc: u-boot
Function dm_pci_hose_probe_bus() expects that bus is valid PCI device with
Bridge header type (0x01). So add check before touching PCI config space to
prevent misconfiguring some non-standard device.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
drivers/pci/pci-uclass.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
index 044babee164f..5da3515f5f25 100644
--- a/drivers/pci/pci-uclass.c
+++ b/drivers/pci/pci-uclass.c
@@ -627,6 +627,7 @@ int pci_generic_mmap_read_config(
int dm_pci_hose_probe_bus(struct udevice *bus)
{
+ u8 header_type;
int sub_bus;
int ret;
int ea_pos;
@@ -634,6 +635,14 @@ int dm_pci_hose_probe_bus(struct udevice *bus)
debug("%s\n", __func__);
+ dm_pci_read_config8(bus, PCI_HEADER_TYPE, &header_type);
+ header_type &= 0x7f;
+ if (header_type != PCI_HEADER_TYPE_BRIDGE) {
+ debug("%s: Skipping PCI device %d with Non-Bridge Header Type 0x%x\n",
+ __func__, PCI_DEV(dm_pci_get_bdf(bus)), header_type);
+ return log_msg_ret("probe", -EINVAL);
+ }
+
ea_pos = dm_pci_find_capability(bus, PCI_CAP_ID_EA);
if (ea_pos) {
dm_pci_read_config8(bus, ea_pos + sizeof(u32) + sizeof(u8),
--
2.20.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/5] pci: Fix configuring BARs
2021-10-07 12:50 [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types Pali Rohár
2021-10-07 12:50 ` [PATCH 2/5] pci: Skip configuring invalid P2P bridge devices Pali Rohár
@ 2021-10-07 12:50 ` Pali Rohár
2021-10-08 5:53 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
2021-10-07 12:51 ` [PATCH 4/5] pci: Fix showing bars Pali Rohár
` (3 subsequent siblings)
5 siblings, 2 replies; 15+ messages in thread
From: Pali Rohár @ 2021-10-07 12:50 UTC (permalink / raw)
To: Simon Glass, Vladimir Oltean, Bin Meng, Stefan Roese; +Cc: u-boot
Number of BARs is defined by header type, not by class code.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
drivers/pci/pci_auto.c | 31 +++++++++++++++++++++++++------
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/drivers/pci/pci_auto.c b/drivers/pci/pci_auto.c
index 288f7996c7c0..5af4ee6e56df 100644
--- a/drivers/pci/pci_auto.c
+++ b/drivers/pci/pci_auto.c
@@ -19,7 +19,7 @@
#define CONFIG_SYS_PCI_CACHE_LINE_SIZE 8
#endif
-static void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
+static void dm_pciauto_setup_device(struct udevice *dev,
struct pci_region *mem,
struct pci_region *prefetch,
struct pci_region *io)
@@ -28,6 +28,7 @@ static void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
pci_size_t bar_size;
u16 cmdstat = 0;
int bar, bar_nr = 0;
+ int bars_num;
u8 header_type;
int rom_addr;
pci_addr_t bar_value;
@@ -39,6 +40,26 @@ static void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
cmdstat = (cmdstat & ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) |
PCI_COMMAND_MASTER;
+ dm_pci_read_config8(dev, PCI_HEADER_TYPE, &header_type);
+ header_type &= 0x7f;
+
+ switch (header_type) {
+ case PCI_HEADER_TYPE_NORMAL:
+ bars_num = 6;
+ break;
+ case PCI_HEADER_TYPE_BRIDGE:
+ bars_num = 2;
+ break;
+ case PCI_HEADER_TYPE_CARDBUS:
+ /* CardBus header does not have any BAR */
+ bars_num = 0;
+ break;
+ default:
+ /* Skip configuring BARs for unknown header types */
+ bars_num = 0;
+ break;
+ }
+
for (bar = PCI_BASE_ADDRESS_0;
bar < PCI_BASE_ADDRESS_0 + (bars_num * 4); bar += 4) {
int ret = 0;
@@ -129,8 +150,6 @@ static void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
}
/* Configure the expansion ROM address */
- dm_pci_read_config8(dev, PCI_HEADER_TYPE, &header_type);
- header_type &= 0x7f;
if (header_type == PCI_HEADER_TYPE_NORMAL ||
header_type == PCI_HEADER_TYPE_BRIDGE) {
rom_addr = (header_type == PCI_HEADER_TYPE_NORMAL) ?
@@ -343,7 +362,7 @@ int dm_pciauto_config_device(struct udevice *dev)
debug("PCI Autoconfig: Found P2P bridge, device %d\n",
PCI_DEV(dm_pci_get_bdf(dev)));
- dm_pciauto_setup_device(dev, 2, pci_mem, pci_prefetch, pci_io);
+ dm_pciauto_setup_device(dev, pci_mem, pci_prefetch, pci_io);
ret = dm_pci_hose_probe_bus(dev);
if (ret < 0)
@@ -356,7 +375,7 @@ int dm_pciauto_config_device(struct udevice *dev)
* just do a minimal setup of the bridge,
* let the OS take care of the rest
*/
- dm_pciauto_setup_device(dev, 0, pci_mem, pci_prefetch, pci_io);
+ dm_pciauto_setup_device(dev, pci_mem, pci_prefetch, pci_io);
debug("PCI Autoconfig: Found P2CardBus bridge, device %d\n",
PCI_DEV(dm_pci_get_bdf(dev)));
@@ -388,7 +407,7 @@ int dm_pciauto_config_device(struct udevice *dev)
/* fall through */
default:
- dm_pciauto_setup_device(dev, 6, pci_mem, pci_prefetch, pci_io);
+ dm_pciauto_setup_device(dev, pci_mem, pci_prefetch, pci_io);
break;
}
--
2.20.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 4/5] pci: Fix showing bars
2021-10-07 12:50 [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types Pali Rohár
2021-10-07 12:50 ` [PATCH 2/5] pci: Skip configuring invalid P2P bridge devices Pali Rohár
2021-10-07 12:50 ` [PATCH 3/5] pci: Fix configuring BARs Pali Rohár
@ 2021-10-07 12:51 ` Pali Rohár
2021-10-08 5:53 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
2021-10-07 12:51 ` [PATCH 5/5] pci: Fix showing registers Pali Rohár
` (2 subsequent siblings)
5 siblings, 2 replies; 15+ messages in thread
From: Pali Rohár @ 2021-10-07 12:51 UTC (permalink / raw)
To: Simon Glass, Vladimir Oltean, Bin Meng, Stefan Roese; +Cc: u-boot
Header type is 7-bit number so properly clear upper 8th bit which
indicates multifunction device.
And do not try to show bars for unsupported header types.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
cmd/pci.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/cmd/pci.c b/cmd/pci.c
index cfabdc0f3012..4a82854db7fa 100644
--- a/cmd/pci.c
+++ b/cmd/pci.c
@@ -71,10 +71,15 @@ static int pci_bar_show(struct udevice *dev)
int prefetchable;
dm_pci_read_config8(dev, PCI_HEADER_TYPE, &header_type);
+ header_type &= 0x7f;
if (header_type == PCI_HEADER_TYPE_CARDBUS) {
printf("CardBus doesn't support BARs\n");
return -ENOSYS;
+ } else if (header_type != PCI_HEADER_TYPE_NORMAL &&
+ header_type != PCI_HEADER_TYPE_BRIDGE) {
+ printf("unknown header type\n");
+ return -ENOSYS;
}
bar_cnt = (header_type == PCI_HEADER_TYPE_NORMAL) ? 6 : 2;
--
2.20.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 5/5] pci: Fix showing registers
2021-10-07 12:50 [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types Pali Rohár
` (2 preceding siblings ...)
2021-10-07 12:51 ` [PATCH 4/5] pci: Fix showing bars Pali Rohár
@ 2021-10-07 12:51 ` Pali Rohár
2021-10-08 5:53 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
2021-10-08 5:52 ` [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types Stefan Roese
2021-10-15 11:52 ` Tom Rini
5 siblings, 2 replies; 15+ messages in thread
From: Pali Rohár @ 2021-10-07 12:51 UTC (permalink / raw)
To: Simon Glass, Vladimir Oltean, Bin Meng, Stefan Roese; +Cc: u-boot
Header type is 7-bit number so use all 7 bits when detecting header type
and not only 2 bits.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
cmd/pci.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmd/pci.c b/cmd/pci.c
index 4a82854db7fa..3b1863f139c9 100644
--- a/cmd/pci.c
+++ b/cmd/pci.c
@@ -239,7 +239,7 @@ static void pci_header_show(struct udevice *dev)
pci_class_str(class));
pci_show_regs(dev, regs_rest);
- switch (header_type & 0x03) {
+ switch (header_type & 0x7f) {
case PCI_HEADER_TYPE_NORMAL: /* "normal" PCI device */
pci_show_regs(dev, regs_normal);
break;
--
2.20.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types
2021-10-07 12:50 [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types Pali Rohár
` (3 preceding siblings ...)
2021-10-07 12:51 ` [PATCH 5/5] pci: Fix showing registers Pali Rohár
@ 2021-10-08 5:52 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
5 siblings, 0 replies; 15+ messages in thread
From: Stefan Roese @ 2021-10-08 5:52 UTC (permalink / raw)
To: Pali Rohár, Simon Glass, Vladimir Oltean, Bin Meng; +Cc: u-boot
On 07.10.21 14:50, Pali Rohár wrote:
> PCI Rom Address is currently supported only for Normal (0x00) and
> Bridge (0x01) header types. Fix code accordingly.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
Thanks,
Stefan
> ---
> drivers/pci/pci_auto.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/pci/pci_auto.c b/drivers/pci/pci_auto.c
> index 08082460eb86..288f7996c7c0 100644
> --- a/drivers/pci/pci_auto.c
> +++ b/drivers/pci/pci_auto.c
> @@ -131,7 +131,8 @@ static void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
> /* Configure the expansion ROM address */
> dm_pci_read_config8(dev, PCI_HEADER_TYPE, &header_type);
> header_type &= 0x7f;
> - if (header_type != PCI_HEADER_TYPE_CARDBUS) {
> + if (header_type == PCI_HEADER_TYPE_NORMAL ||
> + header_type == PCI_HEADER_TYPE_BRIDGE) {
> rom_addr = (header_type == PCI_HEADER_TYPE_NORMAL) ?
> PCI_ROM_ADDRESS : PCI_ROM_ADDRESS1;
> dm_pci_write_config32(dev, rom_addr, 0xfffffffe);
>
Viele Grüße,
Stefan
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/5] pci: Skip configuring invalid P2P bridge devices
2021-10-07 12:50 ` [PATCH 2/5] pci: Skip configuring invalid P2P bridge devices Pali Rohár
@ 2021-10-08 5:52 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
1 sibling, 0 replies; 15+ messages in thread
From: Stefan Roese @ 2021-10-08 5:52 UTC (permalink / raw)
To: Pali Rohár, Simon Glass, Vladimir Oltean, Bin Meng; +Cc: u-boot
On 07.10.21 14:50, Pali Rohár wrote:
> Function dm_pci_hose_probe_bus() expects that bus is valid PCI device with
> Bridge header type (0x01). So add check before touching PCI config space to
> prevent misconfiguring some non-standard device.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
Thanks,
Stefan
> ---
> drivers/pci/pci-uclass.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
> index 044babee164f..5da3515f5f25 100644
> --- a/drivers/pci/pci-uclass.c
> +++ b/drivers/pci/pci-uclass.c
> @@ -627,6 +627,7 @@ int pci_generic_mmap_read_config(
>
> int dm_pci_hose_probe_bus(struct udevice *bus)
> {
> + u8 header_type;
> int sub_bus;
> int ret;
> int ea_pos;
> @@ -634,6 +635,14 @@ int dm_pci_hose_probe_bus(struct udevice *bus)
>
> debug("%s\n", __func__);
>
> + dm_pci_read_config8(bus, PCI_HEADER_TYPE, &header_type);
> + header_type &= 0x7f;
> + if (header_type != PCI_HEADER_TYPE_BRIDGE) {
> + debug("%s: Skipping PCI device %d with Non-Bridge Header Type 0x%x\n",
> + __func__, PCI_DEV(dm_pci_get_bdf(bus)), header_type);
> + return log_msg_ret("probe", -EINVAL);
> + }
> +
> ea_pos = dm_pci_find_capability(bus, PCI_CAP_ID_EA);
> if (ea_pos) {
> dm_pci_read_config8(bus, ea_pos + sizeof(u32) + sizeof(u8),
>
Viele Grüße,
Stefan
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/5] pci: Fix configuring BARs
2021-10-07 12:50 ` [PATCH 3/5] pci: Fix configuring BARs Pali Rohár
@ 2021-10-08 5:53 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
1 sibling, 0 replies; 15+ messages in thread
From: Stefan Roese @ 2021-10-08 5:53 UTC (permalink / raw)
To: Pali Rohár, Simon Glass, Vladimir Oltean, Bin Meng; +Cc: u-boot
On 07.10.21 14:50, Pali Rohár wrote:
> Number of BARs is defined by header type, not by class code.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
Thanks,
Stefan
> ---
> drivers/pci/pci_auto.c | 31 +++++++++++++++++++++++++------
> 1 file changed, 25 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/pci/pci_auto.c b/drivers/pci/pci_auto.c
> index 288f7996c7c0..5af4ee6e56df 100644
> --- a/drivers/pci/pci_auto.c
> +++ b/drivers/pci/pci_auto.c
> @@ -19,7 +19,7 @@
> #define CONFIG_SYS_PCI_CACHE_LINE_SIZE 8
> #endif
>
> -static void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
> +static void dm_pciauto_setup_device(struct udevice *dev,
> struct pci_region *mem,
> struct pci_region *prefetch,
> struct pci_region *io)
> @@ -28,6 +28,7 @@ static void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
> pci_size_t bar_size;
> u16 cmdstat = 0;
> int bar, bar_nr = 0;
> + int bars_num;
> u8 header_type;
> int rom_addr;
> pci_addr_t bar_value;
> @@ -39,6 +40,26 @@ static void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
> cmdstat = (cmdstat & ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) |
> PCI_COMMAND_MASTER;
>
> + dm_pci_read_config8(dev, PCI_HEADER_TYPE, &header_type);
> + header_type &= 0x7f;
> +
> + switch (header_type) {
> + case PCI_HEADER_TYPE_NORMAL:
> + bars_num = 6;
> + break;
> + case PCI_HEADER_TYPE_BRIDGE:
> + bars_num = 2;
> + break;
> + case PCI_HEADER_TYPE_CARDBUS:
> + /* CardBus header does not have any BAR */
> + bars_num = 0;
> + break;
> + default:
> + /* Skip configuring BARs for unknown header types */
> + bars_num = 0;
> + break;
> + }
> +
> for (bar = PCI_BASE_ADDRESS_0;
> bar < PCI_BASE_ADDRESS_0 + (bars_num * 4); bar += 4) {
> int ret = 0;
> @@ -129,8 +150,6 @@ static void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
> }
>
> /* Configure the expansion ROM address */
> - dm_pci_read_config8(dev, PCI_HEADER_TYPE, &header_type);
> - header_type &= 0x7f;
> if (header_type == PCI_HEADER_TYPE_NORMAL ||
> header_type == PCI_HEADER_TYPE_BRIDGE) {
> rom_addr = (header_type == PCI_HEADER_TYPE_NORMAL) ?
> @@ -343,7 +362,7 @@ int dm_pciauto_config_device(struct udevice *dev)
> debug("PCI Autoconfig: Found P2P bridge, device %d\n",
> PCI_DEV(dm_pci_get_bdf(dev)));
>
> - dm_pciauto_setup_device(dev, 2, pci_mem, pci_prefetch, pci_io);
> + dm_pciauto_setup_device(dev, pci_mem, pci_prefetch, pci_io);
>
> ret = dm_pci_hose_probe_bus(dev);
> if (ret < 0)
> @@ -356,7 +375,7 @@ int dm_pciauto_config_device(struct udevice *dev)
> * just do a minimal setup of the bridge,
> * let the OS take care of the rest
> */
> - dm_pciauto_setup_device(dev, 0, pci_mem, pci_prefetch, pci_io);
> + dm_pciauto_setup_device(dev, pci_mem, pci_prefetch, pci_io);
>
> debug("PCI Autoconfig: Found P2CardBus bridge, device %d\n",
> PCI_DEV(dm_pci_get_bdf(dev)));
> @@ -388,7 +407,7 @@ int dm_pciauto_config_device(struct udevice *dev)
> /* fall through */
>
> default:
> - dm_pciauto_setup_device(dev, 6, pci_mem, pci_prefetch, pci_io);
> + dm_pciauto_setup_device(dev, pci_mem, pci_prefetch, pci_io);
> break;
> }
>
>
Viele Grüße,
Stefan
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 4/5] pci: Fix showing bars
2021-10-07 12:51 ` [PATCH 4/5] pci: Fix showing bars Pali Rohár
@ 2021-10-08 5:53 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
1 sibling, 0 replies; 15+ messages in thread
From: Stefan Roese @ 2021-10-08 5:53 UTC (permalink / raw)
To: Pali Rohár, Simon Glass, Vladimir Oltean, Bin Meng; +Cc: u-boot
On 07.10.21 14:51, Pali Rohár wrote:
> Header type is 7-bit number so properly clear upper 8th bit which
> indicates multifunction device.
>
> And do not try to show bars for unsupported header types.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
Thanks,
Stefan
> ---
> cmd/pci.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/cmd/pci.c b/cmd/pci.c
> index cfabdc0f3012..4a82854db7fa 100644
> --- a/cmd/pci.c
> +++ b/cmd/pci.c
> @@ -71,10 +71,15 @@ static int pci_bar_show(struct udevice *dev)
> int prefetchable;
>
> dm_pci_read_config8(dev, PCI_HEADER_TYPE, &header_type);
> + header_type &= 0x7f;
>
> if (header_type == PCI_HEADER_TYPE_CARDBUS) {
> printf("CardBus doesn't support BARs\n");
> return -ENOSYS;
> + } else if (header_type != PCI_HEADER_TYPE_NORMAL &&
> + header_type != PCI_HEADER_TYPE_BRIDGE) {
> + printf("unknown header type\n");
> + return -ENOSYS;
> }
>
> bar_cnt = (header_type == PCI_HEADER_TYPE_NORMAL) ? 6 : 2;
>
Viele Grüße,
Stefan
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 5/5] pci: Fix showing registers
2021-10-07 12:51 ` [PATCH 5/5] pci: Fix showing registers Pali Rohár
@ 2021-10-08 5:53 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
1 sibling, 0 replies; 15+ messages in thread
From: Stefan Roese @ 2021-10-08 5:53 UTC (permalink / raw)
To: Pali Rohár, Simon Glass, Vladimir Oltean, Bin Meng; +Cc: u-boot
On 07.10.21 14:51, Pali Rohár wrote:
> Header type is 7-bit number so use all 7 bits when detecting header type
> and not only 2 bits.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
Thanks,
Stefan
> ---
> cmd/pci.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/cmd/pci.c b/cmd/pci.c
> index 4a82854db7fa..3b1863f139c9 100644
> --- a/cmd/pci.c
> +++ b/cmd/pci.c
> @@ -239,7 +239,7 @@ static void pci_header_show(struct udevice *dev)
> pci_class_str(class));
> pci_show_regs(dev, regs_rest);
>
> - switch (header_type & 0x03) {
> + switch (header_type & 0x7f) {
> case PCI_HEADER_TYPE_NORMAL: /* "normal" PCI device */
> pci_show_regs(dev, regs_normal);
> break;
>
Viele Grüße,
Stefan
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types
2021-10-07 12:50 [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types Pali Rohár
` (4 preceding siblings ...)
2021-10-08 5:52 ` [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types Stefan Roese
@ 2021-10-15 11:52 ` Tom Rini
5 siblings, 0 replies; 15+ messages in thread
From: Tom Rini @ 2021-10-15 11:52 UTC (permalink / raw)
To: Pali Rohár
Cc: Simon Glass, Vladimir Oltean, Bin Meng, Stefan Roese, u-boot
[-- Attachment #1: Type: text/plain, Size: 327 bytes --]
On Thu, Oct 07, 2021 at 02:50:57PM +0200, Pali Rohár wrote:
> PCI Rom Address is currently supported only for Normal (0x00) and
> Bridge (0x01) header types. Fix code accordingly.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Stefan Roese <sr@denx.de>
Applied to u-boot/master, thanks!
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/5] pci: Skip configuring invalid P2P bridge devices
2021-10-07 12:50 ` [PATCH 2/5] pci: Skip configuring invalid P2P bridge devices Pali Rohár
2021-10-08 5:52 ` Stefan Roese
@ 2021-10-15 11:52 ` Tom Rini
1 sibling, 0 replies; 15+ messages in thread
From: Tom Rini @ 2021-10-15 11:52 UTC (permalink / raw)
To: Pali Rohár
Cc: Simon Glass, Vladimir Oltean, Bin Meng, Stefan Roese, u-boot
[-- Attachment #1: Type: text/plain, Size: 414 bytes --]
On Thu, Oct 07, 2021 at 02:50:58PM +0200, Pali Rohár wrote:
> Function dm_pci_hose_probe_bus() expects that bus is valid PCI device with
> Bridge header type (0x01). So add check before touching PCI config space to
> prevent misconfiguring some non-standard device.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Stefan Roese <sr@denx.de>
Applied to u-boot/master, thanks!
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/5] pci: Fix configuring BARs
2021-10-07 12:50 ` [PATCH 3/5] pci: Fix configuring BARs Pali Rohár
2021-10-08 5:53 ` Stefan Roese
@ 2021-10-15 11:52 ` Tom Rini
1 sibling, 0 replies; 15+ messages in thread
From: Tom Rini @ 2021-10-15 11:52 UTC (permalink / raw)
To: Pali Rohár
Cc: Simon Glass, Vladimir Oltean, Bin Meng, Stefan Roese, u-boot
[-- Attachment #1: Type: text/plain, Size: 269 bytes --]
On Thu, Oct 07, 2021 at 02:50:59PM +0200, Pali Rohár wrote:
> Number of BARs is defined by header type, not by class code.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Stefan Roese <sr@denx.de>
Applied to u-boot/master, thanks!
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 4/5] pci: Fix showing bars
2021-10-07 12:51 ` [PATCH 4/5] pci: Fix showing bars Pali Rohár
2021-10-08 5:53 ` Stefan Roese
@ 2021-10-15 11:52 ` Tom Rini
1 sibling, 0 replies; 15+ messages in thread
From: Tom Rini @ 2021-10-15 11:52 UTC (permalink / raw)
To: Pali Rohár
Cc: Simon Glass, Vladimir Oltean, Bin Meng, Stefan Roese, u-boot
[-- Attachment #1: Type: text/plain, Size: 374 bytes --]
On Thu, Oct 07, 2021 at 02:51:00PM +0200, Pali Rohár wrote:
> Header type is 7-bit number so properly clear upper 8th bit which
> indicates multifunction device.
>
> And do not try to show bars for unsupported header types.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Stefan Roese <sr@denx.de>
Applied to u-boot/master, thanks!
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 5/5] pci: Fix showing registers
2021-10-07 12:51 ` [PATCH 5/5] pci: Fix showing registers Pali Rohár
2021-10-08 5:53 ` Stefan Roese
@ 2021-10-15 11:52 ` Tom Rini
1 sibling, 0 replies; 15+ messages in thread
From: Tom Rini @ 2021-10-15 11:52 UTC (permalink / raw)
To: Pali Rohár
Cc: Simon Glass, Vladimir Oltean, Bin Meng, Stefan Roese, u-boot
[-- Attachment #1: Type: text/plain, Size: 305 bytes --]
On Thu, Oct 07, 2021 at 02:51:01PM +0200, Pali Rohár wrote:
> Header type is 7-bit number so use all 7 bits when detecting header type
> and not only 2 bits.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Stefan Roese <sr@denx.de>
Applied to u-boot/master, thanks!
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2021-10-15 11:53 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-07 12:50 [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types Pali Rohár
2021-10-07 12:50 ` [PATCH 2/5] pci: Skip configuring invalid P2P bridge devices Pali Rohár
2021-10-08 5:52 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
2021-10-07 12:50 ` [PATCH 3/5] pci: Fix configuring BARs Pali Rohár
2021-10-08 5:53 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
2021-10-07 12:51 ` [PATCH 4/5] pci: Fix showing bars Pali Rohár
2021-10-08 5:53 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
2021-10-07 12:51 ` [PATCH 5/5] pci: Fix showing registers Pali Rohár
2021-10-08 5:53 ` Stefan Roese
2021-10-15 11:52 ` Tom Rini
2021-10-08 5:52 ` [PATCH 1/5] pci: Skip configuring PCI Rom Address for unsupported header types Stefan Roese
2021-10-15 11:52 ` Tom Rini
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.