imx8x: kaluga starting enet driver
authorRoni Häcki <roni.haecki@inf.ethz.ch>
Fri, 8 Nov 2019 10:15:45 +0000 (11:15 +0100)
committerRoni Häcki <roni.haecki@inf.ethz.ch>
Fri, 8 Nov 2019 10:15:45 +0000 (11:15 +0100)
Signed-off-by: Roni Häcki <roni.haecki@inf.ethz.ch>

hake/menu.lst.armv8_imx8x
usr/kaluga/armv8_imx8x.c

index e4604ad..f39af91 100644 (file)
@@ -24,6 +24,7 @@ modulenounzip /eclipseclp_ramfs.cpio.gz nospawn
 modulenounzip /skb_ramfs.cpio.gz nospawn
 
 # Drivers
+module /armv8/sbin/enet auto
 #module /armv8/sbin/corectrl auto
 #module /armv8/sbin/pci auto
 
index 70a295d..afd622a 100644 (file)
@@ -88,6 +88,9 @@ static errval_t imx8x_get_device_cap(lpaddr_t address, size_t size, struct capre
 
     return invoke_monitor_create_cap((uint64_t*)&the_cap, caddr, level, slot, disp_get_core_id());
 }
+
+
+
 __attribute__((used))
 static errval_t start_gpio(char*name, lpaddr_t address)
 
@@ -173,6 +176,43 @@ static errval_t start_serial_lpuart(lpaddr_t address)
     return err;
 } 
 
+//serial_lpuart
+__attribute__((used))
+static errval_t start_network(lpaddr_t address)
+
+{   errval_t err;
+    struct module_info *mi;
+    mi = find_module("enet");
+    if(mi == NULL){
+        KALUGA_DEBUG("enet not found, not starting");
+        return KALUGA_ERR_MODULE_NOT_FOUND;
+    }
+    struct driver_argument arg;
+    init_driver_argument(&arg);
+    arg.module_name = "enet_module";
+    struct capref device_frame;
+    err = imx8x_get_device_cap(address, 0x00010000, &device_frame);
+    if(err_is_fail(err)){
+        USER_PANIC_ERR(err, "get_device_cap");
+    }
+    KALUGA_DEBUG("get_device_cap worked\n");
+    //transfer destination
+    struct capref cap = {
+            .cnode = (&arg)->argnode_ref,
+            .slot = DRIVERKIT_ARGCN_SLOT_BAR0
+    };
+    err = cap_copy(cap, device_frame);
+    if(err_is_fail(err)){
+        USER_PANIC_ERR(err, "get_device_cap");
+    }
+    // Store capability in driver_argument: See add_mem_args in start_pci.c lines 197 and following
+    err = default_start_function_pure(0, mi, "enet {}", &arg);
+    if(err_is_fail(err)){
+        USER_PANIC_ERR(err, "get_device_cap");
+    }
+    return err;
+} 
+
 errval_t imx8x_startup(void)
 {
     errval_t err;
@@ -193,6 +233,10 @@ errval_t imx8x_startup(void)
     if(err_is_fail(err) && err_no(err) != KALUGA_ERR_MODULE_NOT_FOUND) {
         USER_PANIC_ERR(err, "imx8x serial lpuart");
     }
-
+    
+    err = start_network(0x5B040000);
+    if(err_is_fail(err) && err_no(err) != KALUGA_ERR_MODULE_NOT_FOUND) {
+        USER_PANIC_ERR(err, "imx8x network");
+    }
     return SYS_ERR_OK;
 }