forked from Minki/linux
powerpc/nvram: Allow byte length reads from mmio NVRAM driver
Add a byte length read and write interface compatible with the nvram_generic driver interface to the mmio driver. Signed-off-by: Martyn Welch <martyn.welch@gefanuc.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
ae142e0c52
commit
690a2d074e
@ -53,6 +53,23 @@ static ssize_t mmio_nvram_read(char *buf, size_t count, loff_t *index)
|
||||
return count;
|
||||
}
|
||||
|
||||
static unsigned char mmio_nvram_read_val(int addr)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned char val;
|
||||
|
||||
if (addr >= mmio_nvram_len)
|
||||
return 0xff;
|
||||
|
||||
spin_lock_irqsave(&mmio_nvram_lock, flags);
|
||||
|
||||
val = ioread8(mmio_nvram_start + addr);
|
||||
|
||||
spin_unlock_irqrestore(&mmio_nvram_lock, flags);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
static ssize_t mmio_nvram_write(char *buf, size_t count, loff_t *index)
|
||||
{
|
||||
unsigned long flags;
|
||||
@ -72,6 +89,19 @@ static ssize_t mmio_nvram_write(char *buf, size_t count, loff_t *index)
|
||||
return count;
|
||||
}
|
||||
|
||||
void mmio_nvram_write_val(int addr, unsigned char val)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (addr < mmio_nvram_len) {
|
||||
spin_lock_irqsave(&mmio_nvram_lock, flags);
|
||||
|
||||
iowrite8(val, mmio_nvram_start + addr);
|
||||
|
||||
spin_unlock_irqrestore(&mmio_nvram_lock, flags);
|
||||
}
|
||||
}
|
||||
|
||||
static ssize_t mmio_nvram_get_size(void)
|
||||
{
|
||||
return mmio_nvram_len;
|
||||
@ -114,6 +144,8 @@ int __init mmio_nvram_init(void)
|
||||
printk(KERN_INFO "mmio NVRAM, %luk at 0x%lx mapped to %p\n",
|
||||
mmio_nvram_len >> 10, nvram_addr, mmio_nvram_start);
|
||||
|
||||
ppc_md.nvram_read_val = mmio_nvram_read_val;
|
||||
ppc_md.nvram_write_val = mmio_nvram_write_val;
|
||||
ppc_md.nvram_read = mmio_nvram_read;
|
||||
ppc_md.nvram_write = mmio_nvram_write;
|
||||
ppc_md.nvram_size = mmio_nvram_get_size;
|
||||
|
Loading…
Reference in New Issue
Block a user