Hi Arnd,
Am 12.07.2022 um 21:07 schrieb Michael Schmitz:
Hi Arnd,
Am 12.07.2022 um 20:12 schrieb Arnd Bergmann:
On Tue, Jul 12, 2022 at 9:58 AM Michael Schmitz <schmitzmic@xxxxxxxxx>
wrote:
+
+static const struct resource mvme147_scsi_rsrc[] __initconst = {
+ DEFINE_RES_MEM(MVME147_SCSI_BASE, 0xff),
Still the wrong size?
Too true - forgot to fix that, sorry.
+ DEFINE_RES_IRQ(MVME147_IRQ_SCSI_PORT),
+};
+
+int __init mvme147_platform_init(void)
+{
+ struct platform_device *pdev;
+ int rv = 0;
+
+ pdev = platform_device_register_simple("mvme147-scsi", -1,
+ mvme147_scsi_rsrc, ARRAY_SIZE(mvme147_scsi_rsrc));
I think you actually have to use platform_device_register_full() to pass
a DMA mask here: As I understand it, the dma_set_mask_and_coherent()
call in the driver fails if the device is not already marked as dma
capable by having an initial mask set.
I'll take a look at that - if true, this requires the amiga-a3000-scsi
platform device set-up be changed in the same way (the gvp11 and a2091
drivers inherit the DMA mask from the Zorro bus default, so ought to
work OK).
I think we are good with using platform_device_register_simple():
setup_pdev_dma_masks() sets the DMA mask to 32 bit when allocating a new
platform device, and platform_device_register_full() only changes that
when passed in a non-zero mask in pdevinfo.
platform_device_register_simple() leaves the pdevinfo mask zero, so the
32 bit default set in setup_pdev_dma_masks() survives.
Cheers,
Michael
Cheers,
Michael
The way this normally works is that the device gets created with a mask
that reflects the capabilities of the bus, while the driver sets a mask
based on what it wants to program into the device, and the dma-mapping
interfaces ensure that we only use the intersection of those.
Arnd