qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] hw/misc/blob-loader: add a generic blob loader


From: Peter Crosthwaite
Subject: Re: [Qemu-devel] [PATCH] hw/misc/blob-loader: add a generic blob loader
Date: Mon, 6 Jan 2014 15:28:53 +1000

On Mon, Jan 6, 2014 at 3:24 PM, Li Guang <address@hidden> wrote:
> Li Guang wrote:
>>
>> Peter Crosthwaite wrote:
>>>
>>> On Mon, Jan 6, 2014 at 2:22 PM, Li Guang<address@hidden>  wrote:
>>>>
>>>> Peter Crosthwaite wrote:
>>>>>
>>>>> On Mon, Jan 6, 2014 at 1:55 PM, Li Guang<address@hidden>
>>>>> wrote:
>>>>>
>>>>>> Li Guang wrote:
>>>>>>
>>>>>>> Paolo Bonzini wrote:
>>>>>>>
>>>>>>>> Il 02/01/2014 11:51, Peter Crosthwaite ha scritto:
>>>>>>>>
>>>>>>>>>>> No, please use "realize" and avoid init.  This way you can use an
>>>>>>>>>>> Error*
>>>>>>>>>>> to report the error.
>>>>>>>>>>>
>>>>>>>>>>> Also, the actual load_image_targphys call probably should be done
>>>>>>>>>>> in
>>>>>>>>>>> a
>>>>>>>>>>> reset handler, not at realize time.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>> Ok I think that settles it. The actual blobbing needs to happen at
>>>>>>>>> reset time. Perhaps the correct approach is to do as much as
>>>>>>>>> possible
>>>>>>>>> (file-path / address sanitsation etc) at realize time, then only
>>>>>>>>> the
>>>>>>>>> actual blob load happens at reset. Going on what Paolo said, I
>>>>>>>>> think
>>>>>>>>> for this device ::init is actually a nop.
>>>>>>>>>
>>>>>>>> Yeah, also because init is in fact a legacy interface to realize.
>>>>>>>>
>>>>>>>> Paolo
>>>>>>>>
>>>>>>>>
>>>>>>> Ok, thanks!
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> Sorry, seems load blob at reset handler can't do the right job,
>>>>>> while the same action can play very well at init or realize.
>>>>>>
>>>>> What's the exact problem with the reset idea?
>>>>>
>>>>>
>>>>>
>>>> code snippet:
>>>> static void blob_loader_reset(DeviceState *dev)
>>>> {
>>>>      BlobLoaderState *s = BLOB_LOADER(dev);
>>>>
>>>>      if (load_image_targphys(s->file, s->hwaddr, MAX_BLOB_SIZE)<  0) {
>>>>          error_report("can't load %s\n", s->file);
>>>>          exit(1);
>>>>      }
>>>> }
>>>>
>>>> if it is device reset handler, no result,
>>>> kernel doesn't find and parse blob,
>>>> if it is called at device realize phase,
>>>> it works.
>>>>
>>> Need to figure out why I think. There's no fundamental problem here
>>> AFAIK. It must be a bug somewhere.
>>>
>>>> Thanks!
>>>>
>>>>
>>>>>> any suggestion to figure out this problem?
>>>
>>> Run QEMU in GDB and break on your new reset function to see if it is
>>> ever called. If not have a look into QOM/qdev to see how resets work
>>> and how that plays with -device args. If yes, have a look into
>>> load_image_targphys and see why that's not working.
>>>
>>>
>>
>> reset handler definitely be called, and
>> load_image_targphys has no problem,
>> I guess it may be impacted by other RAM related codes,
>> just can't figure out it quickly.
>>
>
> Ok, I found the problem finally,
> load_image_targphys depends on rom_reset to take effect,
> if it's located at reset handler, rom_reset is called before it,
> it surely failed to do the right job.
>
> so, I have to write my own code to load blob into RAM.
>

dma_memory_write() work?

Regards,
Peter

> Thanks!
>
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]