From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shinya Kuribayashi Date: Tue, 05 Jun 2007 16:35:07 +0900 Subject: [U-Boot-Users] [PATCH] PCI_READ_VIA_DWORD_OP: initialize val parameter on fail Message-ID: <4665122B.6010707@necel.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi, pci_hose_read_config_{byte,word}_via_dword uses a temporary read buffer `val32', so if read_config_dword returns -1 then val32 also should be initialized. Without this fix we'll go on scanning bus with vendor or header_ type uninitialized. This brings many unnecessary config trials. compiled and tested with our MIPS board. Thanks, Shinya Index: b/drivers/pci.c =================================================================== --- a/drivers/pci.c +++ b/drivers/pci.c @@ -75,7 +75,7 @@ PCI_OP(write, word, u16, ) PCI_OP(write, dword, u32, ) #endif /* CONFIG_IXP425 */ -#define PCI_READ_VIA_DWORD_OP(size, type, off_mask) \ +#define PCI_READ_VIA_DWORD_OP(size, type, off_mask, error_code) \ int pci_hose_read_config_##size##_via_dword(struct pci_controller *hose,\ pci_dev_t dev, \ int offset, type val) \ @@ -83,7 +83,10 @@ int pci_hose_read_config_##size##_via_dw u32 val32; \ \ if (pci_hose_read_config_dword(hose, dev, offset & 0xfc, &val32) < 0)\ + { \ + error_code; \ return -1; \ + } \ \ *val = (val32 >> ((offset & (int)off_mask) * 8)); \ \ @@ -111,8 +114,8 @@ int pci_hose_write_config_##size##_via_d return 0; \ } -PCI_READ_VIA_DWORD_OP(byte, u8 *, 0x03) -PCI_READ_VIA_DWORD_OP(word, u16 *, 0x02) +PCI_READ_VIA_DWORD_OP(byte, u8 *, 0x03, *val = 0xff) +PCI_READ_VIA_DWORD_OP(word, u16 *, 0x02, *val = 0xffff) PCI_WRITE_VIA_DWORD_OP(byte, u8, 0x03, 0x000000ff) PCI_WRITE_VIA_DWORD_OP(word, u16, 0x02, 0x0000ffff)