From: Oliver Schinagl <oliver+list@schinagl.nl>
To: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"maxime.ripard" <maxime.ripard@free-electrons.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
linux-arm Mailing List <linux-arm-kernel@lists.infradead.org>,
Russell King <linux@arm.linux.org.uk>,
Linus Walleij <linus.walleij@linaro.org>,
Oliver Schinagl <oliver@schinagl.nl>
Subject: Re: [PATCH 1/2] Initial support for Allwinner's Security ID fuses
Date: Sat, 15 Jun 2013 11:34:53 +0200 [thread overview]
Message-ID: <51BC353D.5010001@schinagl.nl> (raw)
In-Reply-To: <CAHp75VdOrSA8EomPruMKzMgnSaVdtEEV0uB9bRpRGv7LiBsRPA@mail.gmail.com>
On 06/15/13 04:14, Andy Shevchenko wrote:
> On Sat, Jun 15, 2013 at 2:16 AM, Oliver Schinagl
> <oliver+list@schinagl.nl> wrote:
>> From: Oliver Schinagl <oliver@schinagl.nl>
>>
>> Allwinner has electric fuses (efuse) on their line of chips. This driver
>> reads those fuses, seeds the kernel entropy and exports them as a sysfs node.
>>
>> These fuses are most likly to be programmed at the factory, encoding
>> things like Chip ID, some sort of serial number etc and appear to be
>> reasonable unique.
>> While in theory, these should be writeable by the user, it will probably
>> be inconvinient to do so. Allwinner recommends that a certain input pin,
>> labeled 'efuse_vddq', be connected to GND. To write these fuses, 2.5 V
>> needs to be applied to this pin.
>>
>> Even so, they can still be used to generate a board-unique mac from, board
>> unique RSA key and seed the kernel RNG.
>>
>> Currently supported are the following known chips:
>> Allwinner sun4i (A10)
>> Allwinner sun5i (A10s, A13)
>
> Few comments below.
>
>> +++ b/drivers/misc/eeprom/sunxi_sid.c
>
>> +#include <linux/compiler.h>
>
> Are you sure this has to be explicitly mentioned?
Well we use __iomem from it, so I think yes
>
>> +#define SID_SIZE (SID_KEYS * 4)
>> +
>> +
>
> Extra line.
to seperate defines/includes from the code?
>
>> +/* We read the entire key, but only return the requested byte. This is of
>> + * course slower then it could be and uses 4 times more reads as needed but
>> + * keeps code simpler.
>
> May be better to rewrite this logic and save CPU and I/O resources?
Well we can only read 32 bits at a time and we only want to return 8
bits. The only think I can think of, is read 32 bits and store those
statically to the function and store with an extra int the location.
Then check against the location and if it's the same use the int. Not
sure all that is worth it.
>
>> + */
>> +static u8 sunxi_sid_read_byte(const void __iomem *sid_reg_base,
>> + const unsigned int offset)
>> +{
>> + u32 sid_key = 0;
>> +
>> + if (offset >= SID_SIZE)
>> + goto exit;
>
> Just return here.
Well as said before, return vs goto; i choose goto ;)
>
>> + sid_key = ioread32be(sid_reg_base + round_down(offset, 4));
>> + sid_key >>= (offset % 4) * 8;
>> + sid_key &= 0xff;
>
> Redundant 0xff.
Yes, but does clarify the intention, which helps in readability?
>
>> + /* fall through */
>> +
>> +exit:
>> + return (u8)sid_key;
>
> No need to have explicit casting here.
Also here, it makes the intention clear, that we are only interested in
the last 8 bits. The compiler should optimize this and the above bit
away so it's only for readability.
>
>> + pdev = (struct platform_device *)to_platform_device(kobj_to_dev(kobj));
>
> Ditto.
Yes, I just looked more closy to container_of, and the 'const
typeof(((type *)0)->member) takes care of the typecast, does it not?
>
>> + sid_reg_base = (void __iomem *)platform_get_drvdata(pdev);
>
> Ditto.
Not sure on this one, since technically, it returns only void * (always)
and we had a void '__iomem *' pointer. for clarity and completness I
would keep it?
>
>> +static int sunxi_sid_remove(struct platform_device *pdev)
>> +{
>> + device_remove_bin_file(&pdev->dev, &sid_bin_attr);
>> + dev_info(&pdev->dev, "sunxi SID driver unloaded\n");
>
> Often this is useless message. In what case this is crucial?
well it's dev_info, so it is only information to the user.
>
>> +static int __init sunxi_sid_probe(struct platform_device *pdev)
>> +{
>> + int entropy[SID_SIZE], i;
>> + struct resource *res;
>> + void __iomem *sid_reg_base;
>> + int ret;
>> +
>> + if (!pdev->dev.of_node) {
>> + dev_err(&pdev->dev, "No devicetree data available\n");
>> + ret = -ENXIO;
>> + goto exit;
>
> You have only return, use it. It's common practice in the .probe() function.
>
>> + if (IS_ERR(sid_reg_base)) {
>> + ret = PTR_ERR(sid_reg_base);
>> + goto exit;
>
> Ditto.
>
>> + ret = device_create_bin_file(&pdev->dev, &sid_bin_attr);
>> + if (ret) {
>> + dev_err(&pdev->dev, "Unable to create sysfs bin entry\n");
>> + goto exit;
>
> Ditto.
>
>> + dev_info(&pdev->dev, "sunxi SID ver %s loaded\n", DRV_VERSION);
>> + ret = 0;
>> + /* fall through */
>
> Ditto.
>
>> +
>> +exit:
>> + return ret;
>
> Useless lines.
>
>> +module_platform_driver(sunxi_sid_driver);
>> +
>> +
>
> Extra line.
Seperate the code from the trailing macro's
>
>
> --
> With Best Regards,
> Andy Shevchenko
>
next prev parent reply other threads:[~2013-06-15 9:34 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-14 23:16 [PATCH 0/2] v3 Driver for Allwinner sunxi Security ID Oliver Schinagl
2013-06-14 23:16 ` [PATCH 1/2] Initial support for Allwinner's Security ID fuses Oliver Schinagl
2013-06-15 2:14 ` Andy Shevchenko
2013-06-15 9:34 ` Oliver Schinagl [this message]
2013-06-15 10:28 ` Tomasz Figa
2013-06-17 10:36 ` Oliver Schinagl
2013-06-17 11:25 ` Russell King - ARM Linux
2013-06-17 11:32 ` Oliver Schinagl
2013-06-17 11:51 ` Maxime Ripard
2013-06-17 12:04 ` Oliver Schinagl
2013-06-17 12:51 ` Tomasz Figa
2013-06-17 13:10 ` Oliver Schinagl
2013-06-17 13:23 ` Tomasz Figa
2013-06-17 13:47 ` Oliver Schinagl
2013-06-14 23:16 ` [PATCH 2/2] Add sunxi-sid to dts for sun4i and sun5i Oliver Schinagl
-- strict thread matches above, loose matches on Subject: below --
2013-08-27 14:13 [PATCHv5 0/2] Driver for Allwinner sunxi Security ID oliver+list
2013-08-27 14:13 ` [PATCH 1/2] Initial support for Allwinner's Security ID fuses oliver+list
2013-08-27 15:42 ` Maxime Ripard
2013-06-17 20:59 [PATCH 0/2] v4 Driver for Allwinner sunxi Security ID Oliver Schinagl
2013-06-17 20:59 ` [PATCH 1/2] Initial support for Allwinner's Security ID fuses Oliver Schinagl
2013-06-17 21:06 ` Tomasz Figa
2013-06-17 22:58 ` Greg KH
2013-06-24 9:29 ` Maxime Ripard
2013-06-24 16:04 ` Greg KH
2013-06-24 17:11 ` Oliver Schinagl
2013-06-24 18:15 ` Greg KH
2013-06-24 21:21 ` Oliver Schinagl
2013-06-24 21:46 ` Greg KH
2013-06-26 8:32 ` Oliver Schinagl
2013-06-26 17:51 ` Greg KH
2013-07-05 7:24 ` Oliver Schinagl
2013-07-06 19:36 ` Greg KH
2013-07-07 0:17 ` Greg KH
2013-06-26 9:10 ` Russell King - ARM Linux
2013-06-26 17:51 ` Greg KH
2013-06-24 21:04 ` Maxime Ripard
2013-06-26 9:22 ` Geert Uytterhoeven
2013-06-26 17:49 ` Greg KH
2013-06-18 5:41 ` Andy Shevchenko
2013-06-02 14:58 [PATCH 0/2] v2 Driver for Allwinner sunxi Security ID Oliver Schinagl
2013-06-02 14:58 ` [PATCH 1/2] Initial support for Allwinner's Security ID fuses Oliver Schinagl
2013-06-02 15:09 ` Russell King - ARM Linux
2013-06-02 15:21 ` Oliver Schinagl
2013-06-06 19:16 ` Andy Shevchenko
2013-06-10 21:43 ` Oliver Schinagl
2013-06-11 10:51 ` Andy Shevchenko
2013-05-17 13:35 [PATCH 0/2] Driver for Allwinner sunxi Security ID Oliver Schinagl
2013-05-17 13:35 ` [PATCH 1/2] Initial support for Allwinner's Security ID fuses Oliver Schinagl
2013-05-17 13:45 ` Arnd Bergmann
2013-05-17 18:54 ` Oliver Schinagl
2013-05-17 21:18 ` Maxime Ripard
2013-05-18 17:19 ` Oliver Schinagl
2013-05-19 15:22 ` Maxime Ripard
2013-05-24 21:50 ` Oliver Schinagl
2013-05-25 12:22 ` Maxime Ripard
2013-05-25 19:25 ` Oliver Schinagl
2013-05-26 9:35 ` Maxime Ripard
2013-05-23 7:56 ` Linus Walleij
2013-05-23 8:10 ` Oliver Schinagl
2013-05-23 8:20 ` Linus Walleij
2013-05-23 14:58 ` Maxime Ripard
2013-05-23 15:05 ` Oliver Schinagl
2013-05-23 15:27 ` Maxime Ripard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51BC353D.5010001@schinagl.nl \
--to=oliver+list@schinagl.nl \
--cc=andy.shevchenko@gmail.com \
--cc=arnd@arndb.de \
--cc=gregkh@linuxfoundation.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=maxime.ripard@free-electrons.com \
--cc=oliver@schinagl.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox