On Fri, Dec 16, 2011 at 5:54 PM, Mark Kettenis <[email protected]> wrote:
>> Date: Fri, 16 Dec 2011 17:46:30 -0500
>> From: Brian Callahan <[email protected]>
>>
>> sdhc0 at pci3 dev 0 function 0 "Ricoh 5U823 SD/MMC" rev 0x04panic:
>> kernel diagnostic assertion "(reg & 0x3) == 0" failed: file
>> "../../../../arch/amd64/pci/pci_machdep.c", line 298
>
> Ugh, I made a typo there. B This one should work better.
>
> Index: sdhc_pci.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/sdhc_pci.c,v
> retrieving revision 1.11
> diff -u -p -r1.11 sdhc_pci.c
> --- sdhc_pci.c B 31 Jul 2011 16:55:01 -0000 B  B  B 1.11
> +++ sdhc_pci.c B 16 Dec 2011 22:52:15 -0000
> @@ -98,11 +98,42 @@ sdhc_pci_attach(struct device *parent, s
>
> B  B  B  B /* Some RICOH controllers lack a capability register. */
> B  B  B  B if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_RICOH &&
> - B  B  B  B  B  PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_RICOH_R5U823)
> + B  B  B  B  B  PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_RICOH_R5U823) {
> + B  B  B  B  B  B  B  reg = pci_conf_read(pa->pa_pc, pa->pa_tag, 0xf8);
> + B  B  B  B  B  B  B  reg &= ~0x0000ff00;
> + B  B  B  B  B  B  B  reg |= 0x0000fc00;
> + B  B  B  B  B  B  B  pci_conf_write(pa->pa_pc, pa->pa_tag, 0xf8, reg);
> +
> + B  B  B  B  B  B  B  reg = pci_conf_read(pa->pa_pc, pa->pa_tag, 0x150);
> + B  B  B  B  B  B  B  reg &= ~0x000000ff;
> + B  B  B  B  B  B  B  reg |= 0x00000010;
> + B  B  B  B  B  B  B  pci_conf_write(pa->pa_pc, pa->pa_tag, 0x150, reg);
> +
> + B  B  B  B  B  B  B  reg = pci_conf_read(pa->pa_pc, pa->pa_tag, 0xf8);
> + B  B  B  B  B  B  B  reg &= ~0x0000ff00;
> + B  B  B  B  B  B  B  reg |= 0x00000000;
> + B  B  B  B  B  B  B  pci_conf_write(pa->pa_pc, pa->pa_tag, 0xf8, reg);
> +
> + B  B  B  B  B  B  B  reg = pci_conf_read(pa->pa_pc, pa->pa_tag, 0xfc);
> + B  B  B  B  B  B  B  reg &= ~0x000000ff;
> + B  B  B  B  B  B  B  reg |= 0x00000001;
> + B  B  B  B  B  B  B  pci_conf_write(pa->pa_pc, pa->pa_tag, 0xfc, reg);
> +
> + B  B  B  B  B  B  B  reg = pci_conf_read(pa->pa_pc, pa->pa_tag, 0xe0);
> + B  B  B  B  B  B  B  reg &= ~0x0000ff00;
> + B  B  B  B  B  B  B  reg |= 0x00003200;
> + B  B  B  B  B  B  B  pci_conf_write(pa->pa_pc, pa->pa_tag, 0xe0, reg);
> +
> + B  B  B  B  B  B  B  reg = pci_conf_read(pa->pa_pc, pa->pa_tag, 0xfc);
> + B  B  B  B  B  B  B  reg &= ~0x000000ff;
> + B  B  B  B  B  B  B  reg |= 0x00000000;
> + B  B  B  B  B  B  B  pci_conf_write(pa->pa_pc, pa->pa_tag, 0xfc, reg);
> +
> B  B  B  B  B  B  B  B caps = (0x21 << SDHC_BASE_FREQ_SHIFT) |
> B  B  B  B  B  B  B  B  B  B  B  B (0x21 << SDHC_TIMEOUT_FREQ_SHIFT) |
> B  B  B  B  B  B  B  B  B  B  B  B SDHC_TIMEOUT_FREQ_UNIT | 
> SDHC_VOLTAGE_SUPP_3_3V |
> B  B  B  B  B  B  B  B  B  B  B  B SDHC_DMA_SUPPORT;
> + B  B  B  }
>
> B  B  B  B if (pci_intr_map(pa, &ih)) {
> B  B  B  B  B  B  B  B printf(": can't map interrupt\n");

The second patch works perfectly. Thanks!

Reply via email to