[pasemi] Internal CompactFlash (CF) card device not recognised after the powerpc-4.8-1 merge

Christian Zigotzky chzigotzky at xenosoft.de
Fri Aug 12 19:20:35 AEST 2016


I meant, I reverted the setup.c.

- Christian

On 12 August 2016 at 11:00 AM, Christian Zigotzky wrote:
> Hi All,
>
> I reverted the commit 
> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/diff/arch/powerpc/platforms/pasemi/setup.c?id=bad60e6f259a01cf9f29a1ef8d435ab6c60b2de9. 
> It boots but it doesn't find any partitions.
>
> Cheers,
>
> Christian
>
> On 11 August 2016 at 5:03 PM, Christian Zigotzky wrote:
>> Hi All,
>>
>> I was able to patch the RC1 with the Nemo and PHB-numbering patch. 
>> Additionally I added some printks in the file pata_of_platform.c. I 
>> wanted to know which values have the following variables:
>>
>> ctl_res = io_res;
>> io_res.start += 0x800;
>> ctl_res.start = ctl_res.start + 0x80e;
>> io_res.end = ctl_res.start-1;
>>
>> It compiled without any problems but unfortunately I didn't see any 
>> printk outputs of these variables. The output of pata_of_platform is 
>> missing too. I see this output in the dmesg of the kernel 4.7 but I 
>> don't see it in the dmesg of the kernel 4.8.
>>
>> I have the feeling, that pata_of_platform doesn't work anymore. Maybe 
>> this is the reason, why the CF card doesn't work anymore.
>>
>> Maybe this is the problem: 
>> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/diff/arch/powerpc/platforms/pasemi/setup.c?id=bad60e6f259a01cf9f29a1ef8d435ab6c60b2de9
>>
>> Do you have any hints for me?
>>
>> Cheers,
>>
>> Christian
>>
>> On 05 August 2016 at 11:42 PM, Darren Stevens wrote:
>>> Hello Nicholas
>>>
>>> On 06/08/2016, Nicholas Piggin wrote:
>>>>
>>>> Hi Christian,
>>> On 05 August 2016 at 1:41 PM, Christian Zigotzky wrote:
>>>
>>> Hi All,
>>>
>>>
>>>
>>> The internal PASEMI CompactFlash (CF) card device doesn't work anymore
>>> after the powerpc-4.8-1 merge. That means the code for the internal CF
>>> card device in the Nemo patch doesn't work after the first PowerPC
>>> merge. The CompactFlash (CF) card slot is wired to the CPU local bus.
>>> It is typically used to hold the Linux kernel. I know it isn't well to
>>> use an own patch for that but I think it is a good time to integrate
>>> the PASEMI internal CompactFlash (CF) card device to the official
>>> kernel. What do you think? I am not a programmer so I can't integrate
>>> the source code for the internal CF card device. But maybe you can
>>> take the patch and integrate it.
>>>
>>>
>>>
>>> We use the following patch for the kernel 4.7:
>>>
>>>
>>>
>>>      diff -rupN a/drivers/ata/pata_of_platform.c
>>> b/drivers/ata/pata_of_platform.c
>>>
>>>      --- a/drivers/ata/pata_of_platform.c   2016-08-05
>>> 09:58:41.410569036 +0200
>>>
>>>      +++ b/drivers/ata/pata_of_platform.c   2016-08-05
>>> 09:59:54.414288884 +0200
>>>
>>>      @@ -41,14 +41,36 @@ static int pata_of_platform_probe(struct
>>>
>>>             return -EINVAL;
>>>
>>>          }
>>>
>>>
>>>
>>>      -   ret = of_address_to_resource(dn, 1, &ctl_res);
>>>
>>>      -   if (ret) {
>>>
>>>      -      dev_err(&ofdev->dev, "can't get CTL address from "
>>>
>>>      -         "device tree\n");
>>>
>>>      -      return -EINVAL;
>>>
>>>      +   if (of_device_is_compatible(dn, "electra-ide")) {
>>>
>>>      +      /* Altstatus is really at offset 0x3f6 from the primary 
>>> window
>>>
>>>      +       * on electra-ide. Adjust ctl_res and io_res accordingly.
>>>
>>>      +       */
>>>
>>>      +      ctl_res = io_res;
>>>
>>>      +      ctl_res.start = ctl_res.start+0x3f6;
>>>
>>>      +      io_res.end = ctl_res.start-1;
>>>
>>>      +
>>>
>>>      +#ifdef CONFIG_PPC_PASEMI_SB600
>>>
>>>      +       } else if (of_device_is_compatible(dn, "electra-cf")) {
>>>
>>>      +               /* Task regs are at 0x800, with alt status @ 0x80e
>>> in the primary window
>>>
>>>      +                * on electra-cf. Adjust ctl_res and io_res
>>> accordingly.
>>>
>>>      +                */
>>>
>>>      +               ctl_res = io_res;
>>>
>>>      +               io_res.start += 0x800;
>>>
>>>      +               ctl_res.start = ctl_res.start + 0x80e;
>>>
>>>      +               io_res.end = ctl_res.start-1;
>>>
>>>      +#endif
>>>
>>>      +   } else {
>>>
>>>      +      ret = of_address_to_resource(dn, 1, &ctl_res);
>>>
>>>      +      if (ret) {
>>>
>>>      +         dev_err(&ofdev->dev, "can't get CTL address from "
>>>
>>>      +            "device tree\n");
>>>
>>>      +         return -EINVAL;
>>>
>>>      +      }
>>>
>>>          }
>>>
>>>
>>>
>>>          irq_res = platform_get_resource(ofdev, IORESOURCE_IRQ, 0);
>>>
>>>      +   if (irq_res)
>>>
>>>      +      irq_res->flags = 0;
>>>
>>>
>>>
>>>          prop = of_get_property(dn, "reg-shift", NULL);
>>>
>>>          if (prop)
>>>
>>>      @@ -65,6 +87,11 @@ static int pata_of_platform_probe(struct
>>>
>>>             dev_info(&ofdev->dev, "pio-mode unspecified, assuming
>>> PIO0\n");
>>>
>>>          }
>>>
>>>
>>>
>>>      +#ifdef CONFIG_PPC_PASEMI_SB600
>>>
>>>      +       irq_res = 0;                    // force irq off (doesn't
>>> seem to work)
>>>
>>>      +#endif
>>>
>>>      +
>>>
>>>      +
>>>
>>>          pio_mask = 1 << pio_mode;
>>>
>>>          pio_mask |= (1 << pio_mode) - 1;
>>>
>>>
>>>
>>>      @@ -74,7 +101,11 @@ static int pata_of_platform_probe(struct
>>>
>>>
>>>
>>>       static struct of_device_id pata_of_platform_match[] = {
>>>
>>>          { .compatible = "ata-generic", },
>>>
>>>      -   { },
>>>
>>>      +   { .compatible = "electra-ide", },
>>>
>>>      +#ifdef CONFIG_PPC_PASEMI_SB600
>>>
>>>      +       { .compatible = "electra-cf",},
>>>
>>>      +#endif
>>>
>>>      +   {},
>>>
>>>       };
>>>
>>>       MODULE_DEVICE_TABLE(of, pata_of_platform_match);
>>>
>>>
>>>
>>> dmesg with the kernel 4.7:
>>>
>>>
>>>
>>> zcat /var/log/dmesg.1.gz | grep -i ata7
>>>
>>>
>>>
>>>      [    2.939788] ata7: PATA max PIO0 no IRQ, using PIO polling mmio
>>> cmd 0xf0000800 ctl 0xf000080e
>>>
>>>      [    3.099186] ata7.00: CFA: SanDisk SDCFB-256, HDX 2.33, max PIO4
>>>
>>>      [    3.099191] ata7.00: 501760 sectors, multi 0: LBA
>>>
>>>      [    3.099199] ata7.00: configured for PIO
>>>
>>>
>>>
>>> The dmesg of the latest Git kernel doesn't have any output of our
>>> internal CF card device.
>>>
>>>
>>>
>>> Could you please integrate our PASEMI CF card device again?
>>>
>>>
>>>
>>> Thanks,
>>>
>>>
>>>
>>> Christian
>>>
>>>
>>>
>>>> As for your driver support, it would indeed be a good idea to
>>>> get it supported in the upstream kernel. You should post a
>>>> new mail about that. Take a look at these 3 commits:
>>>>
>>>> 61f7162117d4767875825abf2f6ed1eeebbcceed
>>>> 9cd55be4d22376893d2818ce3c0e5706a3d74121
>>>> ca99140a63b7326ee9a38f64c326317f2c63b594
>>>>
>>>> Your patch comes from code based on the second one. The last
>>>> commit removed it, and says that it is not the best way to
>>>> implement it. You could cc this list and some of the people
>>>> involved with those commits and ask ask for advice about
>>>> getting your driver supported.
>>> Actually, it's almost supported by the base PASemi code anyway, 
>>> there is a
>>> PCMCIA driver in setup.c, but our hardware has been changed enough 
>>> to make it
>>> hang the system when used. I should probably take another look and 
>>> see If I
>>> can fix that. The other option would be to move the above patch to 
>>> where we
>>> add our rtc platform device. One thing that does confuse me is the 
>>> interrupt,
>>> it's attached to GPIO 0, so should be on the mpic int 0 (or maybe 
>>> 16?)but I
>>> could never get it to work.
>>>
>>> Regards
>>> Darren
>>>
>>>
>>
>>
>>
>
>



More information about the Linuxppc-dev mailing list