From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [PATCH v11 2/4] hw/arm/boot: arm_load_kernel implemented as a machine init done notifier Date: Thu, 26 Mar 2015 11:07:52 +0000 Message-ID: <874mp8c8zb.fsf@linaro.org> References: <1425485909-5091-1-git-send-email-eric.auger@linaro.org> <1425485909-5091-3-git-send-email-eric.auger@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id B0E9849BB4 for ; Thu, 26 Mar 2015 07:00:24 -0400 (EDT) Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 9VAMXW8As-x0 for ; Thu, 26 Mar 2015 07:00:22 -0400 (EDT) Received: from socrates.bennee.com (static.88-198-71-155.clients.your-server.de [88.198.71.155]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id A72A349BB3 for ; Thu, 26 Mar 2015 07:00:22 -0400 (EDT) In-reply-to: <1425485909-5091-3-git-send-email-eric.auger@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu To: Eric Auger Cc: eric.auger@st.com, patches@linaro.org, qemu-devel@nongnu.org, pbonzini@redhat.com, kvmarm@lists.cs.columbia.edu List-Id: kvmarm@lists.cs.columbia.edu CkVyaWMgQXVnZXIgPGVyaWMuYXVnZXJAbGluYXJvLm9yZz4gd3JpdGVzOgoKPiBEZXZpY2UgdHJl ZSBub2RlcyBmb3IgdGhlIHBsYXRmb3JtIGJ1cyBhbmQgaXRzIGNoaWxkcmVuIGR5bmFtaWMgc3lz YnVzCj4gZGV2aWNlcyBhcmUgYWRkZWQgaW4gYSBtYWNoaW5lIGluaXQgZG9uZSBub3RpZmllci4g VG8gbG9hZCB0aGUgZHRiIG9uY2UsCj4gYWZ0ZXIgdGhvc2UgbGF0dGVyIG5vZGVzIGFyZSBidWls dCBhbmQgYmVmb3JlIFJPTSBmcmVlemUsIHRoZSBhY3R1YWwKPiBhcm1fbG9hZF9rZXJuZWwgZXhp c3RpbmcgY29kZSBpcyBtb3ZlZCBpbnRvIGEgbm90aWZpZXIgbm90aWZ5IGZ1bmN0aW9uLAo+IGFy bV9sb2FkX2tlcm5lbF9ub3RpZnkuIGFybV9sb2FkX2tlcm5lbCBub3cgb25seSByZWdpc3RlcnMg dGhlCj4gY29ycmVzcG9uZGluZyBub3RpZmllci4KPgo+IE1hY2hpbmUgZmlsZXMgdGhhdCBkbyBu b3Qgc3VwcG9ydCBwbGF0Zm9ybSBidXMgc3RheSB1bmNoYW5nZWQuIE1hY2hpbmUKPiBmaWxlcyB3 aWxsaW5nIHRvIHN1cHBvcnQgZHluYW1pYyBzeXNidXMgZGV2aWNlcyBtdXN0IGNhbGwgYXJtX2xv YWRfa2VybmVsCj4gYmVmb3JlIHN5c2J1cy1mZHQgYXJtX3JlZ2lzdGVyX3BsYXRmb3JtX2J1c19m ZHRfY3JlYXRvciB0byBtYWtlIHN1cmUKPiBkeW5hbWljIHN5c2J1cyBkZXZpY2Ugbm9kZXMgYXJl IGludGVncmF0ZWQgaW4gdGhlIGR0Yi4KPgo+IFNpZ25lZC1vZmYtYnk6IEVyaWMgQXVnZXIgPGVy aWMuYXVnZXJAbGluYXJvLm9yZz4KPiBSZXZpZXdlZC1ieTogU2hhbm5vbiBaaGFvIDx6aGFvc2hl bmdsb25nQGh1YXdlaS5jb20+Cj4gUmV2aWV3ZWQtYnk6IEFsZXhhbmRlciBHcmFmIDxhZ3JhZkBz dXNlLmRlPgoKUmV2aWV3ZWQtYnk6IEFsZXggQmVubsOpZSA8YWxleC5iZW5uZWVAbGluYXJvLm9y Zz4KCj4KPiAtLS0KPgo+IHY4IC0+IHY5Ogo+IC0gZml4IGNvbXBpbGF0aW9uIHdpdGggYXJtLWxp bnV4LXVzZXIKPiAtIHJlb3JkZXIgZmllbGRzIGluIEFybUxvYWRLZXJuZWxOb3RpZmllciBhbmQg dXNlIERPX1VQQ0FTVAo+Cj4gdjcgLT4gdjg6Cj4gLSBBZGQgUmV2aWV3ZWQtYnkgZnJvbSBBbGV4 ICYgU2hhbm5vbgo+IC0gcmViYXNlIG9uIDIuMi4wCj4KPiB2NjogY3JlYXRpb24gb2YgdGhpcyBw YXRjaCBmaWxlCj4gLS0tCj4gIGh3L2FybS9ib290LmMgICAgICAgIHwgMTQgKysrKysrKysrKysr Ky0KPiAgaW5jbHVkZS9ody9hcm0vYXJtLmggfCAyOCArKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gIDIgZmlsZXMgY2hhbmdlZCwgNDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ Cj4gZGlmZiAtLWdpdCBhL2h3L2FybS9ib290LmMgYi9ody9hcm0vYm9vdC5jCj4gaW5kZXggYTQ4 ZDFiMi4uNWFjNTQ3OSAxMDA2NDQKPiAtLS0gYS9ody9hcm0vYm9vdC5jCj4gKysrIGIvaHcvYXJt L2Jvb3QuYwo+IEBAIC01NTUsNyArNTU1LDcgQEAgc3RhdGljIHZvaWQgbG9hZF9pbWFnZV90b19m d19jZmcoRldDZmdTdGF0ZSAqZndfY2ZnLCB1aW50MTZfdCBzaXplX2tleSwKPiAgICAgIGZ3X2Nm Z19hZGRfYnl0ZXMoZndfY2ZnLCBkYXRhX2tleSwgZGF0YSwgc2l6ZSk7Cj4gIH0KPiAgCj4gLXZv aWQgYXJtX2xvYWRfa2VybmVsKEFSTUNQVSAqY3B1LCBzdHJ1Y3QgYXJtX2Jvb3RfaW5mbyAqaW5m bykKPiArc3RhdGljIHZvaWQgYXJtX2xvYWRfa2VybmVsX25vdGlmeShOb3RpZmllciAqbm90aWZp ZXIsIHZvaWQgKmRhdGEpCj4gIHsKPiAgICAgIENQVVN0YXRlICpjczsKPiAgICAgIGludCBrZXJu ZWxfc2l6ZTsKPiBAQCAtNTY2LDYgKzU2NiwxMSBAQCB2b2lkIGFybV9sb2FkX2tlcm5lbChBUk1D UFUgKmNwdSwgc3RydWN0IGFybV9ib290X2luZm8gKmluZm8pCj4gICAgICBod2FkZHIgZW50cnks IGtlcm5lbF9sb2FkX29mZnNldDsKPiAgICAgIGludCBiaWdfZW5kaWFuOwo+ICAgICAgc3RhdGlj IGNvbnN0IEFSTUluc25GaXh1cCAqcHJpbWFyeV9sb2FkZXI7Cj4gKyAgICBBcm1Mb2FkS2VybmVs Tm90aWZpZXIgKm4gPSBET19VUENBU1QoQXJtTG9hZEtlcm5lbE5vdGlmaWVyLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLCBub3RpZmllcik7Cj4g KyAgICBBUk1DUFUgKmNwdSA9IG4tPmNwdTsKPiArICAgIHN0cnVjdCBhcm1fYm9vdF9pbmZvICpp bmZvID0KPiArICAgICAgICBjb250YWluZXJfb2Yobiwgc3RydWN0IGFybV9ib290X2luZm8sIGxv YWRfa2VybmVsX25vdGlmaWVyKTsKPiAgCj4gICAgICAvKiBDUFUgb2JqZWN0cyAodW5saWtlIGRl dmljZXMpIGFyZSBub3QgYXV0b21hdGljYWxseSByZXNldCBvbiBzeXN0ZW0KPiAgICAgICAqIHJl c2V0LCBzbyB3ZSBtdXN0IGFsd2F5cyByZWdpc3RlciBhIGhhbmRsZXIgdG8gZG8gc28uIElmIHdl J3JlCj4gQEAgLTc3MywzICs3NzgsMTAgQEAgdm9pZCBhcm1fbG9hZF9rZXJuZWwoQVJNQ1BVICpj cHUsIHN0cnVjdCBhcm1fYm9vdF9pbmZvICppbmZvKQo+ICAgICAgICAgIEFSTV9DUFUoY3MpLT5l bnYuYm9vdF9pbmZvID0gaW5mbzsKPiAgICAgIH0KPiAgfQo+ICsKPiArdm9pZCBhcm1fbG9hZF9r ZXJuZWwoQVJNQ1BVICpjcHUsIHN0cnVjdCBhcm1fYm9vdF9pbmZvICppbmZvKQo+ICt7Cj4gKyAg ICBpbmZvLT5sb2FkX2tlcm5lbF9ub3RpZmllci5jcHUgPSBjcHU7Cj4gKyAgICBpbmZvLT5sb2Fk X2tlcm5lbF9ub3RpZmllci5ub3RpZmllci5ub3RpZnkgPSBhcm1fbG9hZF9rZXJuZWxfbm90aWZ5 Owo+ICsgICAgcWVtdV9hZGRfbWFjaGluZV9pbml0X2RvbmVfbm90aWZpZXIoJmluZm8tPmxvYWRf a2VybmVsX25vdGlmaWVyLm5vdGlmaWVyKTsKPiArfQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2h3 L2FybS9hcm0uaCBiL2luY2x1ZGUvaHcvYXJtL2FybS5oCj4gaW5kZXggNWM5NDBlYi4uNzYwODA0 YyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2h3L2FybS9hcm0uaAo+ICsrKyBiL2luY2x1ZGUvaHcv YXJtL2FybS5oCj4gQEAgLTEzLDExICsxMywyMSBAQAo+ICAKPiAgI2luY2x1ZGUgImV4ZWMvbWVt b3J5LmgiCj4gICNpbmNsdWRlICJody9pcnEuaCIKPiArI2luY2x1ZGUgInFlbXUvbm90aWZ5Lmgi Cj4gIAo+ICAvKiBhcm12N20uYyAqLwo+ICBxZW11X2lycSAqYXJtdjdtX2luaXQoTWVtb3J5UmVn aW9uICpzeXN0ZW1fbWVtb3J5LCBpbnQgbWVtX3NpemUsIGludCBudW1faXJxLAo+ICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2VybmVsX2ZpbGVuYW1lLCBjb25zdCBjaGFyICpj cHVfbW9kZWwpOwo+ICAKPiArLyoKPiArICogc3RydWN0IHVzZWQgYXMgYSBwYXJhbWV0ZXIgb2Yg dGhlIGFybV9sb2FkX2tlcm5lbCBtYWNoaW5lIGluaXQKPiArICogZG9uZSBub3RpZmllcgo+ICsg Ki8KPiArdHlwZWRlZiBzdHJ1Y3Qgewo+ICsgICAgTm90aWZpZXIgbm90aWZpZXI7IC8qIGFjdHVh bCBub3RpZmllciAqLwo+ICsgICAgQVJNQ1BVICpjcHU7IC8qIGhhbmRsZSB0byB0aGUgZmlyc3Qg Y3B1IG9iamVjdCAqLwo+ICt9IEFybUxvYWRLZXJuZWxOb3RpZmllcjsKPiArCj4gIC8qIGFybV9i b290LmMgKi8KPiAgc3RydWN0IGFybV9ib290X2luZm8gewo+ICAgICAgdWludDY0X3QgcmFtX3Np emU7Cj4gQEAgLTY0LDYgKzc0LDggQEAgc3RydWN0IGFybV9ib290X2luZm8gewo+ICAgICAgICog dGhlIHVzZXIgaXQgc2hvdWxkIGltcGxlbWVudCB0aGlzIGhvb2suCj4gICAgICAgKi8KPiAgICAg IHZvaWQgKCptb2RpZnlfZHRiKShjb25zdCBzdHJ1Y3QgYXJtX2Jvb3RfaW5mbyAqaW5mbywgdm9p ZCAqZmR0KTsKPiArICAgIC8qIG1hY2hpbmUgaW5pdCBkb25lIG5vdGlmaWVyIGV4ZWN1dGluZyBh cm1fbG9hZF9kdGIgKi8KPiArICAgIEFybUxvYWRLZXJuZWxOb3RpZmllciBsb2FkX2tlcm5lbF9u b3RpZmllcjsKPiAgICAgIC8qIFVzZWQgaW50ZXJuYWxseSBieSBhcm1fYm9vdC5jICovCj4gICAg ICBpbnQgaXNfbGludXg7Cj4gICAgICBod2FkZHIgaW5pdHJkX3N0YXJ0Owo+IEBAIC03NSw2ICs4 NywyMiBAQCBzdHJ1Y3QgYXJtX2Jvb3RfaW5mbyB7Cj4gICAgICAgKi8KPiAgICAgIGJvb2wgZmly bXdhcmVfbG9hZGVkOwo+ICB9Owo+ICsKPiArLyoqCj4gKyAqIGFybV9sb2FkX2tlcm5lbCAtIExv YWRzIG1lbW9yeSB3aXRoIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGJvb3QKPiArICoKPiArICogQGNw dTogaGFuZGxlIHRvIHRoZSBmaXJzdCBDUFUgb2JqZWN0Cj4gKyAqIEBpbmZvOiBoYW5kbGUgdG8g dGhlIGJvb3QgaW5mbyBzdHJ1Y3QKPiArICogUmVnaXN0ZXJzIGEgbWFjaGluZSBpbml0IGRvbmUg bm90aWZpZXIgdGhhdCBjb3BpZXMgdG8gbWVtb3J5Cj4gKyAqIGV2ZXJ5dGhpbmcgbmVlZGVkIHRv IGJvb3QsIGRlcGVuZGluZyBvbiBtYWNoaW5lIGFuZCB1c2VyIG9wdGlvbnM6Cj4gKyAqIGtlcm5l bCBpbWFnZSwgYm9vdCBsb2FkZXJzLCBpbml0cmQsIGR0Yi4gQWxzbyByZWdpc3RlcnMgdGhlIENQ VQo+ICsgKiByZXNldCBoYW5kbGVyLgo+ICsgKgo+ICsgKiBJbiBjYXNlIHRoZSBtYWNoaW5lIGZp bGUgc3VwcG9ydHMgdGhlIHBsYXRmb3JtIGJ1cyBkZXZpY2UgYW5kIGl0cwo+ICsgKiBkeW5hbWlj YWxseSBpbnN0YW50aWFibGUgc3lzYnVzIGRldmljZXMsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBj YWxsZWQKPiArICogYmVmb3JlIHN5c2J1cy1mZHQgYXJtX3JlZ2lzdGVyX3BsYXRmb3JtX2J1c19m ZHRfY3JlYXRvci4gSW5kZWVkIHRoZQo+ICsgKiBtYWNoaW5lIGluaXQgZG9uZSBub3RpZmllcnMg YXJlIGNhbGxlZCBpbiByZWdpc3RyYXRpb24gcmV2ZXJzZSBvcmRlci4KPiArICovCj4gIHZvaWQg YXJtX2xvYWRfa2VybmVsKEFSTUNQVSAqY3B1LCBzdHJ1Y3QgYXJtX2Jvb3RfaW5mbyAqaW5mbyk7 Cj4gIAo+ICAvKiBNdWx0aXBsaWNhdGlvbiBmYWN0b3IgdG8gY29udmVydCBmcm9tIHN5c3RlbSBj bG9jayB0aWNrcyB0byBxZW11IHRpbWVyCgotLSAKQWxleCBCZW5uw6llCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bWFybSBtYWlsaW5nIGxpc3QKa3Zt YXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRwczovL2xpc3RzLmNzLmNvbHVtYmlhLmVkdS9t YWlsbWFuL2xpc3RpbmZvL2t2bWFybQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59904) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yb5dI-0002xW-6U for qemu-devel@nongnu.org; Thu, 26 Mar 2015 07:07:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Yb5dE-0000Va-Re for qemu-devel@nongnu.org; Thu, 26 Mar 2015 07:07:28 -0400 Received: from static.88-198-71-155.clients.your-server.de ([88.198.71.155]:59506 helo=socrates.bennee.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yb5dE-0000VU-Ja for qemu-devel@nongnu.org; Thu, 26 Mar 2015 07:07:24 -0400 References: <1425485909-5091-1-git-send-email-eric.auger@linaro.org> <1425485909-5091-3-git-send-email-eric.auger@linaro.org> From: Alex =?utf-8?Q?Benn=C3=A9e?= In-reply-to: <1425485909-5091-3-git-send-email-eric.auger@linaro.org> Date: Thu, 26 Mar 2015 11:07:52 +0000 Message-ID: <874mp8c8zb.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v11 2/4] hw/arm/boot: arm_load_kernel implemented as a machine init done notifier List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Auger Cc: peter.maydell@linaro.org, eric.auger@st.com, patches@linaro.org, qemu-devel@nongnu.org, pbonzini@redhat.com, kvmarm@lists.cs.columbia.edu Eric Auger writes: > Device tree nodes for the platform bus and its children dynamic sysbus > devices are added in a machine init done notifier. To load the dtb once, > after those latter nodes are built and before ROM freeze, the actual > arm_load_kernel existing code is moved into a notifier notify function, > arm_load_kernel_notify. arm_load_kernel now only registers the > corresponding notifier. > > Machine files that do not support platform bus stay unchanged. Machine > files willing to support dynamic sysbus devices must call arm_load_kernel > before sysbus-fdt arm_register_platform_bus_fdt_creator to make sure > dynamic sysbus device nodes are integrated in the dtb. > > Signed-off-by: Eric Auger > Reviewed-by: Shannon Zhao > Reviewed-by: Alexander Graf Reviewed-by: Alex Bennée > > --- > > v8 -> v9: > - fix compilation with arm-linux-user > - reorder fields in ArmLoadKernelNotifier and use DO_UPCAST > > v7 -> v8: > - Add Reviewed-by from Alex & Shannon > - rebase on 2.2.0 > > v6: creation of this patch file > --- > hw/arm/boot.c | 14 +++++++++++++- > include/hw/arm/arm.h | 28 ++++++++++++++++++++++++++++ > 2 files changed, 41 insertions(+), 1 deletion(-) > > diff --git a/hw/arm/boot.c b/hw/arm/boot.c > index a48d1b2..5ac5479 100644 > --- a/hw/arm/boot.c > +++ b/hw/arm/boot.c > @@ -555,7 +555,7 @@ static void load_image_to_fw_cfg(FWCfgState *fw_cfg, uint16_t size_key, > fw_cfg_add_bytes(fw_cfg, data_key, data, size); > } > > -void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info) > +static void arm_load_kernel_notify(Notifier *notifier, void *data) > { > CPUState *cs; > int kernel_size; > @@ -566,6 +566,11 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info) > hwaddr entry, kernel_load_offset; > int big_endian; > static const ARMInsnFixup *primary_loader; > + ArmLoadKernelNotifier *n = DO_UPCAST(ArmLoadKernelNotifier, > + notifier, notifier); > + ARMCPU *cpu = n->cpu; > + struct arm_boot_info *info = > + container_of(n, struct arm_boot_info, load_kernel_notifier); > > /* CPU objects (unlike devices) are not automatically reset on system > * reset, so we must always register a handler to do so. If we're > @@ -773,3 +778,10 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info) > ARM_CPU(cs)->env.boot_info = info; > } > } > + > +void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info) > +{ > + info->load_kernel_notifier.cpu = cpu; > + info->load_kernel_notifier.notifier.notify = arm_load_kernel_notify; > + qemu_add_machine_init_done_notifier(&info->load_kernel_notifier.notifier); > +} > diff --git a/include/hw/arm/arm.h b/include/hw/arm/arm.h > index 5c940eb..760804c 100644 > --- a/include/hw/arm/arm.h > +++ b/include/hw/arm/arm.h > @@ -13,11 +13,21 @@ > > #include "exec/memory.h" > #include "hw/irq.h" > +#include "qemu/notify.h" > > /* armv7m.c */ > qemu_irq *armv7m_init(MemoryRegion *system_memory, int mem_size, int num_irq, > const char *kernel_filename, const char *cpu_model); > > +/* > + * struct used as a parameter of the arm_load_kernel machine init > + * done notifier > + */ > +typedef struct { > + Notifier notifier; /* actual notifier */ > + ARMCPU *cpu; /* handle to the first cpu object */ > +} ArmLoadKernelNotifier; > + > /* arm_boot.c */ > struct arm_boot_info { > uint64_t ram_size; > @@ -64,6 +74,8 @@ struct arm_boot_info { > * the user it should implement this hook. > */ > void (*modify_dtb)(const struct arm_boot_info *info, void *fdt); > + /* machine init done notifier executing arm_load_dtb */ > + ArmLoadKernelNotifier load_kernel_notifier; > /* Used internally by arm_boot.c */ > int is_linux; > hwaddr initrd_start; > @@ -75,6 +87,22 @@ struct arm_boot_info { > */ > bool firmware_loaded; > }; > + > +/** > + * arm_load_kernel - Loads memory with everything needed to boot > + * > + * @cpu: handle to the first CPU object > + * @info: handle to the boot info struct > + * Registers a machine init done notifier that copies to memory > + * everything needed to boot, depending on machine and user options: > + * kernel image, boot loaders, initrd, dtb. Also registers the CPU > + * reset handler. > + * > + * In case the machine file supports the platform bus device and its > + * dynamically instantiable sysbus devices, this function must be called > + * before sysbus-fdt arm_register_platform_bus_fdt_creator. Indeed the > + * machine init done notifiers are called in registration reverse order. > + */ > void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info); > > /* Multiplication factor to convert from system clock ticks to qemu timer -- Alex Bennée