From: "Mike Frysinger" <vapier.adi@gmail.com>
To: "Jiri Slaby" <jirislaby@gmail.com>
Cc: "Bryan Wu" <cooloney@kernel.org>,
sam@ravnborg.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/1] Blackfin OTP Char Driver: add writing support of OTP
Date: Mon, 13 Oct 2008 05:43:36 -0400 [thread overview]
Message-ID: <8bd0f97a0810130243q39581ef5y704c500c8ac3ee1c@mail.gmail.com> (raw)
In-Reply-To: <48F316C4.1070603@gmail.com>
On Mon, Oct 13, 2008 at 05:37, Jiri Slaby wrote:
> On 10/13/2008 11:13 AM, Bryan Wu wrote:
>> From: Mike Frysinger <vapier.adi@gmail.com>
>
> Some changelog please.
i implemented write support. like the subject says ... not sure what
else to say.
>> @@ -123,18 +132,95 @@ static ssize_t bfin_otp_write(struct file *filp, const char __user *buff, size_t
>> if (mutex_lock_interruptible(&bfin_otp_lock))
>> return -ERESTARTSYS;
>>
>> - /* need otp_init() documentation before this can be implemented */
>> + stampit();
>> +
>> + timing = bfin_otp_init_timing();
>> + if (timing == 0) {
>> + mutex_unlock(&bfin_otp_lock);
>> + return -EIO;
>> + }
>> +
>> + base_flags = OTP_CHECK_FOR_PREV_WRITE;
>> +
>> + bytes_done = 0;
>> + page = *pos / (sizeof(u64) * 2);
>> + while (bytes_done < count) {
>> + flags = base_flags | (*pos % (sizeof(u64) * 2) ? OTP_UPPER_HALF : OTP_LOWER_HALF);
>> + stamp("processing page %i (0x%x:%s) from %p", page, flags,
>> + (flags & OTP_UPPER_HALF ? "upper" : "lower"), buff + bytes_done);
>> + if (copy_from_user(&content, buff + bytes_done, sizeof(content))) {
>> + bytes_done = -EFAULT;
>> + break;
>> + }
>> + ret = bfrom_OtpWrite(page, flags, &content);
>> + if (ret & OTP_MASTER_ERROR) {
>> + stamp("error from otp: 0x%x", ret);
>> + bytes_done = -EIO;
>> + break;
>> + }
>> + if (flags & OTP_UPPER_HALF)
>> + ++page;
>> + bytes_done += sizeof(content);
>> + *pos += sizeof(content);
>
> What happens to pos if it fails later?
there is no state maintained in the hardware. the pos gets updated
only when a half-page actually gets processed. so there is no
"later".
>> +static int bfin_otp_ioctl(struct inode *inode, struct file *filp,
>> + unsigned cmd, unsigned long arg)
>> +{
>> + stampit();
>> +
>> + switch (cmd) {
>> + case OTPLOCK: {
>> + u32 timing;
>> + int ret = -EIO;
>> +
>> + if (!allow_writes)
>> + return -EACCES;
>> +
>> + if (mutex_lock_interruptible(&bfin_otp_lock))
>> + return -ERESTARTSYS;
>> +
>> + timing = bfin_otp_init_timing();
>> + if (timing) {
>> + u32 otp_result = bfrom_OtpWrite(arg, OTP_LOCK, NULL);
>> + stamp("locking page %i resulted in 0x%x", arg, otp_result);
>> + if (!(otp_result & OTP_MASTER_ERROR))
>> + ret = 0;
>> +
>> + bfin_otp_deinit_timing(timing);
>> + }
>> +
>> + mutex_unlock(&bfin_otp_lock);
>> +
>> + return ret;
>> + }
>> +
>> + case MEMLOCK:
>> + allow_writes = false;
>> + return 0;
>> +
>> + case MEMUNLOCK:
>> + allow_writes = true;
>> + return 0;
>
> Please switch to unlocked_ioctl. It should be pretty easy.
will do, thanks
> You should change (and check) allow_writes under the mutex anyway.
not really. the mutex is to restrict access to the OTP hardware, not
driver state. because there is none. access to allow_writes is
atomic in the hardware anyways.
thanks for the review
-mike
next prev parent reply other threads:[~2008-10-13 9:59 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-13 9:13 Bryan Wu
2008-10-13 9:37 ` Jiri Slaby
2008-10-13 9:43 ` Mike Frysinger [this message]
2008-10-13 9:59 ` Jiri Slaby
2008-10-13 10:07 ` Mike Frysinger
2008-10-13 10:35 ` Jiri Slaby
2008-10-13 10:44 ` Mike Frysinger
2009-09-23 17:38 ` [PATCH v2] bfin-otp: add writing support Mike Frysinger
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=8bd0f97a0810130243q39581ef5y704c500c8ac3ee1c@mail.gmail.com \
--to=vapier.adi@gmail.com \
--cc=cooloney@kernel.org \
--cc=jirislaby@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=sam@ravnborg.org \
/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
all inboxes | Powered by JetHome®