[PATCH] ath79: rb4xx-nand: fix 512 byte pages compatibility

Bas Mevissen abuse at basmevissen.nl
Fri May 28 05:19:51 PDT 2021


On 2021-05-28 13:55, Sergey Ryazanov wrote:
> Hello Bas,
> 
> thank you for your review, please find my comments below.
> 
> On Fri, May 28, 2021 at 11:41 AM Bas Mevissen <abuse at basmevissen.nl> 
> wrote:
>> On 2021-05-28 00:27, Sergey Ryazanov wrote:
> 
> [skipped]
> 
>>> +static int rb4xx_nand_attach_chip(struct nand_chip *chip)
>>> +{
>>> +     struct mtd_info *mtd = nand_to_mtd(chip);
>>> +
>>> +     /*
>>> +      * Now we knows flash parameters and can tweak OOB the layout 
>>> for old
>> 
>> Rephrase to something like:
>> Knowing the flash parameters, we can tweak the OOB layout for old
>> 
> 
> Yeah, I am not happy with this comment too, but this is the best I was
> able to compose at 01:00 :) I will rephrase it if V2 will be needed.
> 
> Here we need a comment that briefly and clearly states that the NAND
> params become known at this particular moment of initialization.
> Before this moment, we do not know the page size, after this moment it
> is too late to reconfigure something. Do you have any thoughts?
> 

The original comment with some spelling/grammar corrections looked fine. 
Having some hint that something is deliberately done at that stage is 
sufficient IMHO.

>>> +      * (usually 64MiB) flashes.
>>> +      *
>>> +      * We need to use the OLD Yaffs-1 OOB layout, otherwise the RB
>>> +      * bootloader will not be able to find the kernel that we load.
>>> +      */
>>> +     if (mtd->writesize == 512)
>>> +             mtd_set_ooblayout(mtd, &rb4xx_nand_ecclayout_ops);
>>> +
>>> +     return 0;
>>> +}
>>> +
>>>  static u8 rb4xx_nand_read_byte(struct nand_chip *chip)
>>>  {
>>>       struct rb4xx_nand *nand = chip->priv;
>>> @@ -135,6 +152,10 @@ static int rb4xx_nand_dev_ready(struct nand_chip
>>> *chip)
>>>       return gpiod_get_value_cansleep(nand->rdy);
>>>  }
>>> 
>>> +static const struct nand_controller_ops rb4xx_nand_controller_ops = 
>>> {
>>> +     .attach_chip = rb4xx_nand_attach_chip,
>> 
>> remove the ,
> 
> I intentionally placed the comma here to make text git-friendly. If we
> will need to define more callbacks here, then we will just add a new
> new line, without modifying the earlier added lines.
> 

Agreed. It actually sounds like a good practice. Learned something today 
:-)

> E.g. if commit this code without the comma, then a chip detaching
> callback patch will looks like this:
> 
>  static const struct nand_controller_ops rb4xx_nand_controller_ops = {
> -     .attach_chip = rb4xx_nand_attach_chip
> +     .attach_chip = rb4xx_nand_attach_chip,
> +     .detach_chip = rb4xx_nand_detach_chip,
>  };
> 
> With this intentionally placed comma, the same theoretical patch will
> looks like this:
> 
>  static const struct nand_controller_ops rb4xx_nand_controller_ops = {
>       .attach_chip = rb4xx_nand_attach_chip,
> +     .detach_chip = rb4xx_nand_detach_chip,
>  };
> 
> So this comma is my investment in the future ;)
> 
>>> +};
>>> +
>>>  static int rb4xx_nand_probe(struct platform_device *pdev)
>>>  {
>>>       struct device *dev = &pdev->dev;
>>> @@ -185,9 +206,6 @@ static int rb4xx_nand_probe(struct 
>>> platform_device
>>> *pdev)
>>>       mtd->dev.parent = dev;
>>>       mtd_set_of_node(mtd, dev->of_node);
>>> 
>>> -     if (mtd->writesize == 512)
>>> -             mtd_set_ooblayout(mtd, &rb4xx_nand_ecclayout_ops);
>>> -
>>>       nand->chip.ecc.mode     = NAND_ECC_SOFT;
>>>       nand->chip.ecc.algo     = NAND_ECC_HAMMING;
>>>       nand->chip.options      = NAND_NO_SUBPAGE_WRITE;
>>> @@ -199,6 +217,7 @@ static int rb4xx_nand_probe(struct 
>>> platform_device
>>> *pdev)
>>>       nand->chip.legacy.cmd_ctrl      = rb4xx_nand_cmd_ctrl;
>>>       nand->chip.legacy.dev_ready     = rb4xx_nand_dev_ready;
>>>       nand->chip.legacy.chip_delay    = 25;
>>> +     nand->chip.legacy.dummy_controller.ops = 
>>> &rb4xx_nand_controller_ops;
>> 
>> Fix indentation for all nand->something assignments to line up the =
>> sign
> 
> I do not think that this is a good idea for this patch. Here we add
> one line that configures the single field deep inside the structure.
> The line is placed after the configuration of "surface" fields. So the
> overall look should not be harmed dreadfully.
> 
> In case we will rework the indentation with this patch, the 57 lines
> patch will become a ~70 lines patch. Where at least 12 lines will
> rework indentation, so the functional part could be easily lost. Also
> the moving text back and forth within an item line, turns the history
> to the white noise and makes git-blame(1) usage a pain.
> 
> If you prefer, then I could insert an empty line before the ops setup
> to make it nice looking. E.g. turn this hunk:
> 
> @@ -199,6 +217,7 @@ static int rb4xx_nand_probe(struct platform_device 
> *pdev)
>       nand->chip.legacy.cmd_ctrl      = rb4xx_nand_cmd_ctrl;
>       nand->chip.legacy.dev_ready     = rb4xx_nand_dev_ready;
>       nand->chip.legacy.chip_delay    = 25;
> +     nand->chip.legacy.dummy_controller.ops = 
> &rb4xx_nand_controller_ops;
> 
> into this:
> 
> @@ -199,6 +217,7 @@ static int rb4xx_nand_probe(struct platform_device 
> *pdev)
>       nand->chip.legacy.cmd_ctrl      = rb4xx_nand_cmd_ctrl;
>       nand->chip.legacy.dev_ready     = rb4xx_nand_dev_ready;
>       nand->chip.legacy.chip_delay    = 25;
> +
> +     nand->chip.legacy.dummy_controller.ops = 
> &rb4xx_nand_controller_ops;
> 
> But I do not think this rework is worth the V2 on its own.

Agreed. For that reason, I stopped trying to align such lists. It 
usually gets messy anyway:

if you start with something like:

short_var.x   = foo;
short_var.val = 100;

and add next week:
long_long_long_name.y                  = blabla;
long_long_long_name.long_other_name    = blabla;

the file as a whole still looks messy.

I would say, just fix up the comment a bit and send a V2.

Bas.



More information about the openwrt-devel mailing list