Skip to content

Commit 3be6fc5

Browse files
committed
feat: Seek firmware from path specified in /sys/module/firmware_class/parameters/path
Signed-off-by: Yejin Seo <yejseo01@arm.com>
1 parent c5a596c commit 3be6fc5

4 files changed

Lines changed: 52 additions & 14 deletions

File tree

cmd/remoteproc-simulator/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ Example usage:
8888

8989
rootCmd.Flags().UintVar(&index, "index", 0, "is the N in /sys/class/remoteproc/remoteprocN/.../ (default 0)")
9090
rootCmd.Flags().StringVar(&name, "name", "dsp0", "remote processor name written to /sys/class/remoteproc/.../name")
91-
rootCmd.Flags().StringVar(&rootDir, "root-dir", "", "location where /sys and /lib will be created")
91+
rootCmd.Flags().StringVar(&rootDir, "root-dir", "", "location where /sys will be created")
9292
rootCmd.Flags().BoolVar(&showVersion, "version", false, "show version information")
9393

9494
if err := rootCmd.Execute(); err != nil {

e2e/boostrapping_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package e2e
22

33
import (
4+
"os"
45
"path/filepath"
56
"testing"
67

@@ -50,7 +51,8 @@ func TestBootstrapping(t *testing.T) {
5051

5152
runSimulator(t, "--root-dir", root, "--index", "99")
5253

53-
firmwareDir := filepath.Join(root, "lib", "firmware")
54-
assert.DirExists(t, firmwareDir)
54+
firmwareDir, err := os.ReadFile(filepath.Join(root, "sys", "module", "firmware_class", "parameters", "path"))
55+
assert.NoError(t, err)
56+
assert.DirExists(t, string(firmwareDir))
5557
})
5658
}

e2e/running_firmware_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func TestRunningFirmware(t *testing.T) {
2525
requireState(t, instanceDir, "offline")
2626
})
2727

28-
t.Run("firmware file must exist in /lib/firmware", func(t *testing.T) {
28+
t.Run("firmware file must exist in folder indicated inside /sys/module/firmware_class/parameters/path", func(t *testing.T) {
2929
root := t.TempDir()
3030
runSimulator(t, "--root-dir", root, "--index", "0")
3131
instanceDir := filepath.Join(root, "sys", "class", "remoteproc", "remoteproc0")
@@ -38,7 +38,10 @@ func TestRunningFirmware(t *testing.T) {
3838
}
3939

4040
func createFirmwareFile(t *testing.T, root, firmwareName string) {
41-
firmwarePath := filepath.Join(root, "lib", "firmware", firmwareName)
41+
firmwareDirPath, err := os.ReadFile(filepath.Join(root, "sys", "module", "firmware_class", "parameters", "path"))
42+
require.NoError(t, err)
43+
os.MkdirAll(string(firmwareDirPath), 0755)
44+
firmwarePath := filepath.Join(string(firmwareDirPath), firmwareName)
4245
require.NoError(t, writeFile(firmwarePath, ""))
4346
}
4447

pkg/simulator/filesystem.go

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,19 @@ import (
77
)
88

99
type FileSystemManager struct {
10-
instanceDir string
11-
firmwareDir string
12-
createdDirs []string
10+
instanceDir string
11+
firmwareDirPathFile string
12+
firmwareDir string
13+
createdDirs []string
1314
}
1415

1516
func NewFileSystemManager(rootDir string, index uint) *FileSystemManager {
1617
instanceName := fmt.Sprintf("remoteproc%d", index)
1718
return &FileSystemManager{
18-
instanceDir: filepath.Join(rootDir, "sys", "class", "remoteproc", instanceName),
19-
firmwareDir: filepath.Join(rootDir, "lib", "firmware"),
20-
createdDirs: []string{},
19+
instanceDir: filepath.Join(rootDir, "sys", "class", "remoteproc", instanceName),
20+
firmwareDirPathFile: filepath.Join(rootDir, "sys", "module", "firmware_class", "parameters", "path"),
21+
firmwareDir: filepath.Join(rootDir, "userhome", "firmware"),
22+
createdDirs: []string{},
2123
}
2224
}
2325

@@ -30,13 +32,24 @@ func (fs *FileSystemManager) BootstrapDirectories() error {
3032
fs.createdDirs = append(fs.createdDirs, createdInstancePath)
3133
}
3234

33-
createdFirmwarePath, err := mkdirAll(fs.firmwareDir, 0755)
35+
createdFirmwareDirPathFileFolder, err := mkfile(fs.firmwareDirPathFile, 0755)
36+
if err != nil {
37+
fs.Cleanup()
38+
return fmt.Errorf("failed to create firmware path directory: %w", err)
39+
}
40+
if createdFirmwareDirPathFileFolder != "" {
41+
fs.createdDirs = append(fs.createdDirs, createdFirmwareDirPathFileFolder)
42+
}
43+
// Write Firmware path
44+
os.WriteFile(fs.firmwareDirPathFile, []byte(fs.firmwareDir), 0644)
45+
46+
createdFirmwareDir, err := mkdirAll(fs.firmwareDir, 0755)
3447
if err != nil {
3548
fs.Cleanup()
3649
return fmt.Errorf("failed to create firmware directory: %w", err)
3750
}
38-
if createdFirmwarePath != "" {
39-
fs.createdDirs = append(fs.createdDirs, createdFirmwarePath)
51+
if createdFirmwareDir != "" {
52+
fs.createdDirs = append(fs.createdDirs, createdFirmwareDir)
4053
}
4154

4255
return nil
@@ -52,6 +65,13 @@ func (fs *FileSystemManager) WriteInstanceFile(filename, content string) error {
5265
}
5366

5467
func (fs *FileSystemManager) FirmwareExists(firmwareName string) bool {
68+
firmwareDir, _ := os.ReadFile(fs.firmwareDirPathFile) // simulate reading the firmware path
69+
firmwareDirStr := string(firmwareDir)
70+
if firmwareDirStr != fs.firmwareDir {
71+
fmt.Printf("firmware path mismatch: expected %s from /sys/module/firmware_class/parameters/path, got %s\n", fs.firmwareDir, firmwareDirStr)
72+
return false
73+
}
74+
5575
path := filepath.Join(fs.firmwareDir, firmwareName)
5676
_, err := os.Stat(path)
5777
return !os.IsNotExist(err)
@@ -75,6 +95,19 @@ func (fs *FileSystemManager) Cleanup() error {
7595
return nil
7696
}
7797

98+
func mkfile(path string, perm os.FileMode) (string, error) {
99+
folder, err := mkdirAll(filepath.Dir(path), perm)
100+
if err != nil {
101+
return "", err
102+
}
103+
file, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR, perm)
104+
if err != nil {
105+
return "", err
106+
}
107+
defer file.Close()
108+
return folder, nil
109+
}
110+
78111
func mkdirAll(path string, perm os.FileMode) (string, error) {
79112
current := path
80113
var topmostMissing string

0 commit comments

Comments
 (0)