
Hi Simon,
On 10/09/2015 05:36 PM, Simon Glass wrote:
Can you create a sandbox driver for this so you can add a test?
Yes. I will add a sandbox driver and test later.
@@ -348,6 +349,8 @@ static int initr_flash(void) /* update start of FLASH memory */ #ifdef CONFIG_SYS_FLASH_BASE bd->bi_flashstart = CONFIG_SYS_FLASH_BASE; +#else
#endifbd->bi_flashstart = cfi_flash_bank_addr(0);
Can we make this dynamic - i.e. only probe the device when it is used? Then we could remove initr_flash() in the DM case.
I will add this to the TODO list. Though the flash is probed to find the size and print message here in initr_flash. It is almost the same time for use.
+menu "CFI Flash Support"
+config DM_CFI_FLASH
bool "Enable Driver Model for CFI Flash drivers"
depends on DM
help
Enable driver model for CFI flash access. It uses the same API as
drivers/mtd/cfi_flash.c. But now implemented by the uclass.
In the help can you explain what CFI is and what it is for?
Yes, I will do.
+UCLASS_DRIVER(cfi_flash) = {
.id = UCLASS_CFI_FLASH,
.name = "cfi_flash",
.per_device_auto_alloc_size = sizeof(struct cfi_flash_dev_priv),
+};
+struct cfi_flash_platdata {
phys_addr_t base;
+};
Can you put this declaration at the top of the file?
I will put it to the top, as I did it at the very early version.
Is there a binding somewhere for this?
A dts binding of cfi-flash will be added.
+#ifdef CONFIG_DM_CFI_FLASH +phys_addr_t cfi_flash_bank_addr(int i) +{
struct udevice *dev;
int ret;
ret = uclass_get_device(UCLASS_CFI_FLASH, i, &dev);
if (ret)
return ret;
if (!dev)
return -ENODEV;
That function will never return a NULL dev, unless it returns an error. It is different from uclass_first_device(). Also are you sure you want uclass_get_device() and not uclass_get_device_by_seq()?
Yes, I should use by_seq. Thanks for reminding.
Best regards, Thomas